web-dev-qa-db-ja.com

列と方向を指定してDataTableをどのようにソートしますか?

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;
   }
71
Sam Gentile

「方向」は「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;
}
104
Berkay Turancı

DataViewが1つしかない場合は、代わりにそれを使用して並べ替えることができます。

table.DefaultView.Sort = "columnName asc";

試したことはありませんが、適切なものを参照する限り、任意の数のDataViewでこれを行うことができます。

66
Alex

実際に同じ問題が発生しました。私にとってこの簡単な方法で働いた:

Datatableにデータを追加して並べ替えます:

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
14
Kᴀτᴢ

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/

7
Paul Sasik

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);

4
Jakub Konecki

複数の方向に並べ替える場合

  public static void sortOutputTable(ref DataTable output)
        {
            DataView dv = output.DefaultView;
            dv.Sort = "specialCode ASC, otherCode DESC";
            DataTable sortedDT = dv.ToTable();
            output = sortedDT;
        }
2
Evan Parsons