C#中實(shí)現(xiàn)DataGrid雙向排序

字號(hào):

在.net 中 DataGrid 雖然有排序的功能,但并不支持雙向的排序。用到了,看了些相關(guān)的帖子,自己嘗試了一種方法,竟然也行得通,主要是用DataGrid.Attributes 存了一個(gè)參數(shù),同時(shí)在onSortCommand中修改了DataGridColumn的SortExpression. 代碼如下:
    private void BindData()
    {
    DataTable dt = .......;
    if(dt != null)
    {
    DataView dv = dt.DefaultView;
    if(DataGrid1.Attributes["SortBy"] != null)
    {
    dv.Sort = DataGrid1.Attributes["SortBy"];
    }
    DataGrid1.DataSource = dv;
    DataGrid1.DataBind();
    }
    }
    private void DataGridSort(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
    {
    DataGrid1.Attributes["SortBy"] = sortstr;
    this.BindData();
    //找到排序的列,并修改把它的排序?qū)傩?BR>    DataGridColumn clm = null;
    for(int i=0;i    {
    if(DataGrid1.Columns[i].SortExpression == e.SortExpression )
    {
    clm = DataGrid1.Columns[i];
    break;
    }
    }
    if(clm == null) return;
    if(e.SortExpression.ToLower().IndexOf("desc") > 0)
    {
    clm.SortExpression = e.SortExpression.ToLower().Replace("desc","asc");
    }
    else
    {
    if(e.SortExpression.ToLower().IndexOf("asc") > 0)
    {
    clm.SortExpression = e.SortExpression.ToLower().Replace("asc","desc");
    }
    else
    {
    clm.SortExpression = e.SortExpression.ToLower() + " desc";
    }
    }
    }