2

3列の次のデータテーブルがあります。

ここに画像の説明を入力

2番目の列に基づいてデータテーブル行をソートしたい(ヘッダーE付き)これを行う組み込み関数はありますか?

私は試した..

    dt.DefaultView.Sort = dt.Columns[1].ColumnName;
    dt.AcceptChanges();
4

2 に答える 2

7

おそらく最も簡単な (そして最も強力な) 方法は、Linq-To-DataSetandを使用することEnumerable.OrderByです。

var tblOrdered = tbl.AsEnumerable()
                    .OrderBy(row => row.Field<int>("E"))
                    .CopyToDataTable();

Linq を使用できない場合は、以下を使用できますDataView.Sort

DataView view = tbl.DefaultView;
view.Sort = "E ASC";

しかし、それは a を使用しDataView、元DataTableはソートされていません。

したがって、テーブルが必要な場合は、次を使用できますDataView.ToTable

tbl = view.ToTable();
于 2012-07-24T14:27:04.127 に答える
4

データブルを列で並べ替えることができます

 dt.DefaultView.Sort = "E Asc";

そうでなければ、このように

string[] names = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
    names[i] = dt.Rows[i]["E"].ToString();
}
Array.Sort(names);

for (int i = 0; i < dt.Rows.Count; i++)
{
    dt.Rows[i]["E"] = names[i];
}

またdt.AcceptChanges、テーブルに加えられたすべての変更をコミットします。aah msdnは、更新を試みた後に呼び出す必要があるとも言っています

MSDNからのコメント

AcceptChangesが呼び出されると、編集モードのままのDataRowオブジェクトは編集を正常に終了します。DataRowStateも変更されます。追加された行と変更された行はすべてUnchangedになり、削除された行は削除されます。

AcceptChangesメソッドは通常、DbDataAdapter.Updateメソッドを使用してDataSetを更新しようとした後、DataTableで呼び出されます。

于 2012-07-24T14:35:23.570 に答える