65.9K
CodeProject 正在变化。 阅读更多。
Home

无需向导的分页(SqldataSource控件)

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (6投票s)

2009 年 1 月 12 日

CPOL

5分钟阅读

viewsIcon

29150

如何在 ASP.NET 中使用无向导分页。

引言

我一直引以为豪的一点是,我总是渴望学习新东西。Dave Kreskowiak 曾告诉我不要用向导来处理我的数据库工作。我非常理解他的原因。我认为向导可以用于原型开发。好了,让我告诉你在 ASP.NET 中遇到的事情。我遇到了“分页”,并在网上查找了关于这个主题的例子。所有的例子都在使用 SqldataSource 控件(向导)。我对这个控件并没有什么意见。我必须承认,微软在这个上面做得非常好。只是我反对使用向导。我属于那种对编写向导为我做的事情感兴趣的程序员。其他人可能会问:“既然轮子已经造好了,为什么还要自己 reinvent?”我的回答是,这能让我成为一个更好的程序员,更好地理解代码。现在,在这篇文章中,我们将遵循 N 层设计风格,编写我们自己的小型分页应用程序,而且不使用任何向导。

背景

我们需要做的第一件事是创建一个数据库并命名。我们将在 SQL 中进行操作。在这篇文章中,我们将使用 ASP.NET 2.0,并使用 C# 作为我们的语言。

开始 (SQL)

Create Database Vuyiswa

创建数据库后,使用该数据库并创建如下表:

create table memyself 
( 
    ID int identity(100,01)Primary key not null, 
    Fname varchar(20) null, 
    Lname varchar(20) null, 
    Tel int null, 
    Adress varchar(35) null, 
    Car_model varchar(20) null, 
    Car_Type varchar(20) null 
)

现在,让我们填充数据。请记住,我们想演示“分页”功能,这意味着我们可以执行 80 次 Insert 语句,以便为演示目的填充足够的数据。请像我下面一样编写 Insert 语句:

--Run the Insert to Fill the Table 
insert into memyself 
values('Dave','Mucky',054545774,'44 Drake Avenue, Pretoriawest 001','2009','HAMMER H3')

完成后,检查表中有多少条记录。

SELECT * FROM memyself

我有 80 条记录,这足以进行测试。

SQl_REs_small.JPG

SQL 方面的最后一步是创建一个我们将要在应用程序中使用的存储过程,如下所示:

CREATE PROC PRCALLDATA 
AS 
SELECT * FROM DBO.memyself

完成后,让我们创建我们的应用程序。我使用的是 VS2005。打开你的 Visual Studio,创建一个新的网站或 Web 应用程序。我使用的是 C#,如果你愿意,也可以使用 VB.NET。正如我之前所说,我所有的例子,无论多么小,我都会以 N 层风格来演示。

创建 N 层

现在,你的应用程序只会包含一个包含“Default.aspx”的网站,如下所示:

SOl_Explorer_PL.JPG

现在,我们必须添加其他层:DAL 和 BLL。右键单击“解决方案资源管理器”,添加一个类项目并命名为“DAL”。再添加一个类项目并命名为“BLL”。之后,在你的 Web.Config 文件中添加一个连接字符串,如下所示:

<appSettings> 
<add key ="F" value="User id =sa;Password=wow;
                      Server=VUYISWA\SQLEXPRESS;Database=VUYISWA"/>; 
</appSettings>

完成后,你的解决方案资源管理器将如下所示:

Sol_Explorer_ALl.JPG

现在似乎一切都准备好编写代码了。等等,我们忘了我们必须先从表示层开始。正如你所见,我已经将我的 default.aspx 重命名为 shop.aspx,因为我喜欢购物。在设计模式下打开你的 default.aspx,并添加一个 GridView。在向导世界(哈利·波特)中,你可能会添加 SqldataSource 控件,但我们不会这样做。最后一件事是添加一个按钮,因为我们不希望在页面加载时显示我们的数据。在页面底部,你会看到类似这样的内容:

Design_switch.JPG

点击“源代码”。我们需要启用分页,你会看到类似这样的内容:

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

现在,将其更改为看起来像这样:

<asp:GridView ID="GridView1" 
runat="server" 
Height="293px" 
Width="674px" 
AllowPaging="True" 
OnPageIndexChanging="GridView1_PageIndexChanging"> 
</asp:GridView>

粗体部分 AllowPaging 是允许你拥有分页功能的,下一部分 OnPageIndexChanging 将允许你跳转到另一页查看不同的数据。在此事件中,你将重新绑定页面。将你的按钮命名为“btnshowdata”,并将其文本更改为“显示数据”。这不是必须的,你可以命名为任何你喜欢的名字。现在,你的页面应该看起来像这样:

PL_Done_Paging.JPG

底部是代表页码的数字。现在,我们希望它的工作方式是:当你点击按钮时,它应该从数据库中显示数据。

DAL

转到你的 DAL,并确保编写如下代码:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data.SqlClient; 
using System.Data; 
using System.Configuration; 
namespace DAL 
{ 
public class DAL 
{ 
    String strcon = ConfigurationManager.AppSettings.Get("F"); 
    SqlConnection con; 
    SqlCommand cmdselect; 
    //SqlCommand cmdupdate; 
    //SqlCommand cmdDelete; 
    SqlDataAdapter da;

    public DataSet GetData() 
    { 
        con = new SqlConnection(strcon); 
        cmdselect = new SqlCommand(); 
        cmdselect.CommandText = "dbo.PRCALLDATA"; 
        cmdselect.CommandTimeout = 0; 
        cmdselect.CommandType = CommandType.StoredProcedure; 
        cmdselect.Connection = con; 
        da = new SqlDataAdapter(); 
        da.SelectCommand = cmdselect; 
        DataSet Curriculat = new DataSet(); 

        try 
        { 
            con.Open(); 
            da.Fill(Curriculat); 
        } 
        catch (SqlException) 
        { 
            throw; 
        } 
        finally 
        { 
            con.Close(); 
        } 
            return Curriculat; 
        } 
    } 
}

返回设计视图,点击 GridView,会弹出一个属性窗口。点击看起来像闪电的符号。

Event_windows.JPG

然后双击 GridView1_PageIndexChanging 事件,并确保它看起来像这样:

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{
    GridView1.PageIndex = e.NewPageIndex; 
    GetData(); 
}

BLL(业务逻辑层)

在 BLL 中,我们调用在 DAL 中创建的函数,并等待 PL(表示层)调用它。转到你的 BLL 项目并执行以下操作。添加对 DAL 项目的引用,然后转到你的表示层(网站)并添加对 BLL 的引用。请记住,PL 不应该直接访问 DAL;它应该通过 BLL 进行访问。

现在,确保你的 BLL 看起来像这样:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace BLL
{
    public class BLL
    {

        public DataSet GetData()
        {
            DAL.DAL obj = new DAL.DAL();

            DataSet Curriculat = new DataSet();

            try
            {
            Curriculat =  obj.GetData();
            
            }
            catch(SqlException)
            {
                throw;
            }
            return Curriculat;
        }
    }
}

再次回到 PL。

转到你的 PL(表示层),你的 ASPX 页面,然后双击。将代码后台代码设置为如下:

private void GetData()
{
    DataSet Curriculat = new DataSet();
    BLL.BLL obj = new BLL.BLL();
    Curriculat = obj.GetData();

    GridView1.DataSource = Curriculat;
    GridView1.DataBind();
}

现在,这将把你的 DataSet 绑定到 DataGrid。你现在只需要调用函数。在你的按钮 Click 事件中,像这样调用函数来绑定 GridView

protected void btnShowData_Click(object sender, EventArgs e)
{
    GetData();
}

完成后,生成并按“F5”来欣赏你的作品。你应该会看到类似这样的内容:

Final_results_small.JPG

点击底部的数字来导航到另一页。我不敢说我做得很好,我只是解释了如何在没有向导的情况下完成这项工作,以便我能够继续使用无向导的方式工作。

结论

在我的下一篇文章中,我们将更新、删除和插入 GridView。在我之前的文章中,我们在 Windows 应用程序中完成了这些操作,现在我们将通过 Web 来实现。这篇文章献给 (www.ITS.co.za) 和 PostOffice 的 Kamogelo Mokgoro (www.SAPO.co.za),因为这是我加入他们(2008 年 12 月 10 日)以来的第一篇文章。谢谢。

© . All rights reserved.