2017-04-15 13 views
0

DataTable.Select( ""、sortExpression)を使用してASP.NET GridViewを並べ替えることはできますか?ASP.NET GridView DataTable.Selectを使用して並べ替え

AllowSorting = "true"およびOnSorting = "grdEmployees_Sorting"の規則的なGridViewがあります。

protected void grdEmployees_Sorting(object sender, GridViewSortEventArgs e) 
     { 
      DataTable dt = getDataTable(); 

      var sortExprOrder = e.SortDirection == SortDirection.Ascending ? " ASC" : " DESC"; 

      var rows = dt.Select("", string.Format(e.SortExpression + "{0}", sortExprOrder)); 

      grdEmployees.DataSource = rows; 
      grdEmployees.DataBind(); 
     } 

理由はわかりませんが、これは機能しません。グリッドには、RowError、RowState、およびHasErrorsの3つの列を持つ行が表示されます(すべての空のチェックボックスがある行が含まれます)。

何か間違っていますか?

答えて

1

あなたはDataTable.Selectをソートするために選択する必要はありませんが、あなたがソート

protected void grdEmployees_Sorting(object sender, GridViewSortEventArgs e) 
     { 
      DataTable dt = getDataTable(); 

      var sortExprOrder = e.SortDirection == SortDirection.Ascending ? " ASC" : " DESC"; 

      DataView dv = new DataView(dt); 
      dv.Sort = string.Format("{0} {1}", 
       e.SortExpression, sortExprOrder); 

      grdEmployees.DataSource = dv; 
      grdEmployees.DataBind(); 
     } 
+0

dt.Select( ""、sortExpressionが)のDataRow []返す方法

これをフィルタリングするためです。 GridViewのDataSourceにDataRow型の配列を割り当てることができないのはなぜですか? – Pavel

+0

DataRowはItemArrayにデータを保持しているので、DataRowをバインドする場合は、GridView1.DataSource = rows.Select(r => r.ItemArray [0]);のようにItemArrayのコレクションをバインドする必要があります。 – Krishna

関連する問題