(ASP.NET)用动态属性和DataView实现DataGrid的双向排序

DataGrid 是 ASP.NET 中非常重要的一个控件。它能方便的让我们实现编辑、排序功能;但是排序功能默认的是升序( ASC ),能不能让 DataGrid 同时实现升降序排列呢?这篇文章将给你一个比较好的解决方法。

下面的例子将告诉你如何给 DataGrid 动态添加 ** sortexpression ** 和 ** sortdirection ** 属性,并通过 DataView 使 DataGird 中的数据按照这两个属性排列。在这个例子中使用的 DataGrid 的 sortexpression 属性只需要在 sortcommand 事件中设置(和通常的排序一样), DataGrid 的 sortexpression 属性保存了最后一次用来排序的字段名称, DataGrid 的 sortdirection 属性保存了最后一次用来排序的字段排列方式(“ ASC ”或者“ DESC ”)

** 页面设计 ** :

1. 在页面上添加一个 DataGrid ;

2. 设置 DataGrid 的 **_ AllowSorting _ ** 属性为 **_ True _ ** ;

3. 设置 **_ AutogenerateColumns _ ** 属性为 **_ False _ ** **_ ; _ **

4. 添加要绑定的字段到 DataGrid ,并按照下表设置其属性。 Sortexpression 属性和数据库中数据表中的字段名保持一致。

我使用 Northwind 数据库中的 Employees 来说明这个例子。

** DataTextField **

|

Header Text

|

** Sort Expression **

---|---|---

EmployeeID

|

Employee ID

|

EmployeeID

LastName

|

Last Name

|

LastName

FirstName

|

First Name

|

FirstName

Title

|

Title

|

Title

City

|

City

|

City

Country

|

Country

|

Country

** 程序代码设计 ** :

1. 在页面第一次被加载时给 DATAGRID 添加动态属性 _ sortexpression _ 和 _ sortdirection _ ;

2. 给指定的字段的 _ sortexpression _ 和 _ sortdirection _ 赋值,在加载时初始化 DataGrid 的排序字段和排序方式;

3. 得到 dataset 和 dataview 对象。设置 dataview 的 ** sort ** 属性为动态属性 _ sortexpression _ 和 _ sortdirection _ 的连接字符串;

4. 用 dataview 绑定 datagrid ;

5. 当表头被点击时,触发 datagrid 的 _ sortcommand _ 事件;

6. 得到 _ sortcommand _ 事件传递过来的 _ sortexpression _ 属性,并与 datagrid 的 _ sortexpression _ 属性比较;

7. 如果找到相等的

a) 先检查 _ sortdirection _ 属性;

b) If sortdirection 属性等于“ ASC ” then

i. 设置 _ sortdirection _ 属性的值等于“ DESC ”

c) Else

i. 设置 _ sortdirection _ 属性的值等于“ ASC ”

d) End If

8. 重复第 3 步

注意:当你运行下面的代码并 点击同一列两次或者两次以上 ,此列的排列方式会自动根据现有的排列方式的反序排列。

下面的下面的代码将给你演示怎么使用 DataGrid 的动态属性和 DataView 对象。

** C# Code: **


private void Page_Load( object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

if (!Page.IsPostBack)

{

if (DataGrid1.Attributes["SortExpression"] == null )

{

DataGrid1.Attributes["SortExpression"] = "LastName";

DataGrid1.Attributes["SortDirection"] = "ASC";

}

BindGrid();

}

}

private void BindGrid()

{

SqlConnection conn = new SqlConnection("server=localhost;uid=sa;pwd=sa;database=Northwind");

conn.Open();

SqlDataAdapter cmd = new SqlDataAdapter("select * from Employees",conn);

DataSet ds = new DataSet();

cmd.Fill(ds,"Employees");

DataView dv = new DataView();

dv = ds.Tables[0].DefaultView;

string SortExpression = DataGrid1.Attributes["SortExpression"];

string SortDirection = DataGrid1.Attributes["SortDirection"];

dv.Sort = SortExpression + " " + SortDirection;

DataGrid1.DataSource = dv;

DataGrid1.DataBind();

}

private void DataGrid1_SortCommand( object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

{

string SortExpression = e.SortExpression.ToString();

string SortDirection = "ASC";

if (SortExpression == DataGrid1.Attributes["SortExpression"])

{

SortDirection = (DataGrid1.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");

}

DataGrid1.Attributes["SortExpression"] = SortExpression;

DataGrid1.Attributes["SortDirection"] = SortDirection;

<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: non

Published At
Categories with Web编程
Tagged with
comments powered by Disqus