DataGrid自动排序

来源:互联网 发布:制作伴奏软件 编辑:程序博客网 时间:2024/05/24 03:53

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 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)       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;
    BindGrid();
}

原创粉丝点击