在.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"; } } }