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