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
HeaderTextSortExpression
EmployeeID
EmployeeID
EmployeeID
LastName
LastName
LastName
FirstName
FirstName
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)Ifsortdirection属性等于“ASC”then
i.设置sortdirection属性的值等于“DESC”
c)Else
i.设置sortdirection属性的值等于“ASC”
d)EndIf
8.重复第3步
注意:当你运行下面的代码并点击同一列两次或者两次以上,此列的排列方式会自动根据现有的排列方式的反序排列。
下面的下面的代码将给你演示怎么使用DataGrid的动态属性和DataView对象。
C#Code:
privatevoidPage_Load(objectsender,System.EventArgse)
{
//在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
if(DataGrid1.Attributes["SortExpression"]==null)
{
DataGrid1.Attributes["SortExpression"]="LastName";
DataGrid1.Attributes["SortDirection"]="ASC";
}
BindGrid();
}
}
privatevoidBindGrid()
{
SqlConnectionconn=newSqlConnection("server=localhost;uid=sa;pwd=sa;database=Northwind");
conn.Open();
SqlDataAdaptercmd=newSqlDataAdapter("select*fromEmployees",conn);
DataSetds=newDataSet();
cmd.Fill(ds,"Employees");
DataViewdv=newDataView();
dv=ds.Tables[0].DefaultView;
stringSortExpression=DataGrid1.Attributes["SortExpression"];
stringSortDirection=DataGrid1.Attributes["SortDirection"];
dv.Sort=SortExpression+""+SortDirection;
DataGrid1.DataSource=dv;
DataGrid1.DataBind();
}
privatevoidDataGrid1_SortCommand(objectsource,System.Web.UI.WebControls.DataGridSortCommandEventArgs
e)
{
stringSortExpression=e.SortExpression.ToString();
stringSortDirection="ASC";
if(SortExpression==DataGrid1.Attributes["SortExpression"])
{
SortDirection=(DataGrid1.Attributes["SortDirection"].ToString()
==SortDirection?"DESC":"ASC");
}
DataGrid1.Attributes["SortExpression"]=SortExpression;
DataGrid1.Attributes["SortDirection"]=SortDirection;
BindGrid();
}