GridViewからの列と方向に基づいて、メモリ内でDataTableを使用する必要があります。関数は次のようにする必要があります。
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
....
}
この機能を埋めるのに助けが必要です。 Selectステートメントを使用できると思いますが、方法はわかりません。このブラウザが原因で[コメント]をクリックすることはできませんが、インプレースソリューションまたは新しいDataTableソリューションのいずれかを表示できます。ポインターを見せてくれる人のために、プロトタイプに似たコード化された関数が必要です。
どうですか:
// ds.Tables[0].DefaultView.Sort="au_fname DESC";
public static void Resort(ref DataTable dt, string colName, string direction)
{
string sortExpression = string.Format("{0} {1}", colName, direction);
dt.DefaultView.Sort = sortExpression;
}
「方向」は「ASC」または「DESC」であり、dtには「colName」という名前の列が含まれていると仮定します
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
dt.DefaultView.Sort = colName + " " + direction;
dtOut = dt.DefaultView.ToTable();
return dtOut;
}
またはdtOutを作成せずに
public static DataTable resort(DataTable dt, string colName, string direction)
{
dt.DefaultView.Sort = colName + " " + direction;
dt = dt.DefaultView.ToTable();
return dt;
}
DataViewが1つしかない場合は、代わりにそれを使用して並べ替えることができます。
table.DefaultView.Sort = "columnName asc";
試したことはありませんが、適切なものを参照する限り、任意の数のDataViewでこれを行うことができます。
実際に同じ問題が発生しました。私にとってこの簡単な方法で働いた:
Datatable
にデータを追加して並べ替えます:
dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
DataTablesには、これを実行できるオーバーロードされたSelectメソッドがあります。こちらをご覧ください: http://msdn.Microsoft.com/en-us/library/way3dy9w.aspx
ただし、Select呼び出しの戻り値はDataTableではなく、RowDataオブジェクトの配列です。関数からDataTableを返したい場合は、そのデータ配列に基づいてゼロから構築する必要があります。両方の問題に対処し、サンプルを提供する投稿を次に示します。 http://social.msdn.Microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/
DataViewを作成します。 DataTableを直接並べ替えることはできませんが、DataTableからDataViewを作成して並べ替えることはできます。
作成: http://msdn.Microsoft.com/en-us/library/hy5b8exc.aspx
並べ替え: http://msdn.Microsoft.com/en-us/library/13wb36xf.aspx
次のコード例は、在庫数が再注文レベル以下のすべての製品を表示するビューを作成し、最初にサプライヤIDでソートし、次に製品名でソートします。
DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);
複数の方向に並べ替える場合
public static void sortOutputTable(ref DataTable output)
{
DataView dv = output.DefaultView;
dv.Sort = "specialCode ASC, otherCode DESC";
DataTable sortedDT = dv.ToTable();
output = sortedDT;
}