C#中实现DataGrid双向排序

  • 来源: 赛迪网 作者: 若水   2008-05-06/11:09
  • 在.net 中 DataGrid 虽然有排序的功能,但并不支持双向的排序。用到了,看了些相关的帖子,自己尝试了一种方法,竟然也行得通,主要是用DataGrid.Attributes 存了一个参数,同时在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(); 
    
    //找到排序的列,并修改把它的排序属性 
    
    DataGridColumn clm = null; 
    
    for(int i=0;i<DataGrid1.Columns.Count;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"; 
    } 
    } 
    }

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多