首页 > 范文大全 > 正文

ASP.NET 2.0中GridView的排序方法

开篇:润墨网以专业的文秘视角,为您筛选了一篇ASP.NET 2.0中GridView的排序方法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:在 2.0中gridview控件代替了 1.1中的DataGrid控件,该控件通常用于显示数据库查询结果。排序是我们在处理数据时经常会碰到的一类操作,GridView控件支持顺序排序和逆序排序。本文介绍在GridView控件中实现排序功能的三种方法

关键词:GridView 排序

在 2.0中可以使用GridView控件自带的AllowSorting属性、AJAX技术或用户自定义方式来实现排序功能。下面我们具体介绍这三种方法。

一、设置AllowSorting属性来实现排序

只要用过GridView控件的就会发现实现排序功能很简单,只需要把该控件的AllowSorting属性设置为True就可以实现了。代码清单1中的页面演示如何对Pubs数据库中的jobs数据表进行排序。

代码清单1 SortGrid.aspx

<body>

<form id=″form1″ runat=″server″>

<div>

<asp:GridView ID=″grdJobs″ runat=″Server″ AllowSorting=″true″

DataSourceID=″SqlDataSource1″></asp:GridView>

<asp:SqlDataSource ID=″SqlDataSource1″ runat=″server″ ConnectionString=″<%$ ConnectionStrings:pubsConnectionString %>″

SelectCommand=″SELECT * FROM [jobs]″></asp:SqlDataSource>

</div>

</form>

</body>

当AllowSorting属性设置为True的时候,GridView的列标题就变成链接。点击列标题,就可以根据选中的列对GridView中的记录进行排序。但是要注意,当显式指定GridView控件的列时,例如绑定列,则需要指定列的SortExpression值才能支持排序,否则,点击此列的标题不会对数据排序。具体实现如代码清单2所示。

代码清单2

<body>

<form id=″form1″ runat=″server″>

<div>

<asp:GridView ID=″grdJobs″ runat=″Server″ AllowSorting=″true″

AutoGenerateColumns=″false″ DataSourceID=″SqlDataSource1″>

<Columns>

<asp:BoundFieldDataField=″job_id″HeaderText=″job_id″

SortExpression=″job_id″/>

<asp:BoundFieldDataField=″job_desc″ HeaderText=″job_desc″

SortExpression=″job_desc″/>

<asp:BoundFieldDataField=″min_lvl″ HeaderText=″min_lvl″

SortExpression=″min_lvl″/>

<asp:BoundFieldDataField=″max_lvl″ HeaderText=″max_lvl″

SortExpression=″max_lvl″/>

</Columns>

</asp:GridView>

<asp:SqlDataSource ID=″SqlDataSource1″ runat=″server″ ConnectionString=″<%$ ConnectionStrings:pubsConnectionString %>″

SelectCommand=″SELECT * FROM [jobs]″></asp:SqlDataSource>

</div>

</form>

</body>

二、 使用AJAX排序

默认情况下,无论何时在GridView中点击列名时将触发整页的PostBack,使包含此控件的页面都会回发到服务器端。但更多时候我们只想对页面GridView控件中的数据进行排序,而页面中其他内容不动,使用AJAX(Asynchronous JavaScript and XML)技术可以实现该操作。在声明GridView的时候将EnableSortingAndPagingCallbacks属性设置为True就可以启用AJAX。代码清单3中的页面在排序的时候就使用了AJAX。

代码清单3 AjaxSort.aspx

<body>

<form id=″form1″ runat=″server″>

<div>

<%=DateTime.Now.ToString() %>

<asp:GridView ID=″grdJobs″ runat=″Server″ AllowSorting=″true″

EnableSortingAndPagingCallbacks=″true″

DataSourceID=″SqlDataSource1″></asp:GridView>

<asp:SqlDataSource ID=″SqlDataSource1″ runat=″server″ ConnectionString=″<%$ ConnectionStrings:pubsConnectionString %>″

SelectCommand=″SELECT * FROM [jobs]″></asp:SqlDataSource>

</div>

</form>

</body>

在代码清单3中,在页面的顶部显示当前时间。但是在GridView中排序数据的时候这个时间并没有改变,这就说明并不是整个页面都被提交给服务器端,只有GridView控件的内容被提交更新。

三、 用户自定义排序界面

多次点击列标题,记录就会在顺序和逆序之间进行切换,但是在列标题上没有一个显示升序降序的图标,这会让最终用户使用时产生迷惑,因为不知道是升序了还是降序了。避免这种情况可以通过响应GridView控件的RowDataBound事件定制排序链接的外观。在为GridView控件绑定到数据源后,呈现每一行记录时都会触发这个事件。代码清单4就用图片来显示数据列的排序状态。

代码清单4 ImageSorting.aspx

<body>

<form id=″form1″ runat=″server″>

<div>

<asp:GridView ID=″grdJobs″ runat=″Server″ AllowSorting=″true″

DataSourceID=″SqlDataSource1″

OnRowDataBound=″grdJobs_RowDataBound″></asp:GridView>

<asp:SqlDataSource ID=″SqlDataSource1″ runat=″server″ ConnectionString=″<%$ ConnectionStrings:pubsConnectionString %>″

SelectCommand=″SELECT * FROM [jobs]″></asp:SqlDataSource>

</div>

</form>

</body>

当用户点击列标题时,将触发事件protected void grdJobs_RowDataBound(object sender, GridViewRowEventArgs e),其程序代码如下:

protected void grdJobs_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.Header)

{

foreach (TableCell cell in e.Row.Cells)

{

LinkButton SortLink = (LinkButton)cell.Controls;

if (SortLink.Text == grdJobs.SortExpression)

{

if(grdJobs.SortDirection == SortDirection.Ascending)

SortLink.Text += ″<img src=’asc.gif’ title=’Sort ascending’>″;

else

SortLink.Text += ″<img src=’desc.gif' title=’Sort descending’>″;

}

}

}

}

在代码清单4中,图片是通过grdJobs_RowDataBound方法添加到标题行的。当前行的RowType属性用来确定当前行是否是标题行,然后,在选中排序列的LinkButton中添加一个HTML<img>标签。

该页面执行后结果如图1所示。用户从图1中可以看到在job_id列标题旁有个向下的箭头,就很清楚现在GridView控件中的数据是按job_id降序显示的。当用户再次点击job_id列标题时,该标题旁会有个向上的箭头,表示当前是升序显示。

总之, 2.0中的GridView控件的排序功能简单、快捷,而且很容易掌握。上述的三种方法,基本上可以满足用户的需求,用户可以根据自己的需要选择适合自己的方法。

参考文献:

[1]Stephen Walther, 2.0揭秘.人民邮电出版社,2007年10月.

[2]江广顺,余松 2.0+SQL Server热门网络应开开发详解.人民邮电出版社,2007年3月.