C#でDatatable列の順序を変更する方法。
例:
作成されたSQLテーブルタイプの順序はQty、Unit、Idですが、プログラムではDataTableの順序はId、Qty、Unitです。コードビハインドでは、DataTableをSQLテーブルタイプに直接渡すため、テーブルの順序が異なります。
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
助けてください
C#でDatatable列の順序を変更する方法。
例:
作成されたSQLテーブルタイプの順序はQty、Unit、Idですが、プログラムではDataTableの順序はId、Qty、Unitです。コードビハインドでは、DataTableをSQLテーブルタイプに直接渡すため、テーブルの順序が異なります。
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
助けてください
Qty,Unit,Id
が、プログラムではDataTableの順序はId,Qty,Unit
です。コードビハインドでは、DataTableをSQLテーブルタイプに直接渡すため、テーブルの順序が異なります。そのため、「列の順序を変更する方法」を尋ねられます。
回答:
DataColumn.SetOrdinalメソッドを使用してみてください。例えば:
dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1);
更新:この回答は、私が予想していたよりもはるかに注目を集めました。混乱を避けて使いやすくするために、DataTableで列の順序付けのための拡張メソッドを作成することにしました。
拡張方法:
public static class DataTableExtensions
{
public static void SetColumnsOrder(this DataTable table, params String[] columnNames)
{
int columnIndex = 0;
foreach(var columnName in columnNames)
{
table.Columns[columnName].SetOrdinal(columnIndex);
columnIndex++;
}
}
}
使用法:
table.SetColumnsOrder("Qty", "Unit", "Id");
または
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
Qty,Id,Unit
おっしゃるように与えることで、テーブルの構造がのみに変わりました。 こんな感じで欲しいです Qty,Unit,Id
。
これは「デフォルトロケール」の回答に基づいていますが、序数を設定する前に無効な列名を削除します。これは、誤って無効な列名を送信すると失敗し、失敗しないようにチェックを入れると、無効な列名が渡された場所でインデックスがスキップされるため、インデックスが間違っているためです。
public static class DataTableExtensions
{
/// <summary>
/// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first.
/// </summary>
/// <param name="table"></param>
/// <param name="columnNames"></param>
/// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks>
public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames)
{
List<string> listColNames = columnNames.ToList();
//Remove invalid column names.
foreach (string colName in columnNames)
{
if (!dtbl.Columns.Contains(colName))
{
listColNames.Remove(colName);
}
}
foreach (string colName in listColNames)
{
dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName));
}
}
私はこれが本当に古い質問であることを知っています..そしてそれは答えられたようです..しかし私は同じ質問でここに来ましたが、質問の理由が異なっていたので、少し異なる答えが私のために働きました。提供されたデータソースを取得し、列をデフォルトの順序で表示する、再利用可能な汎用datagridviewがあります。エイリアスと列の順序および選択を、デザイナーのデータセットのテーブルアダプターレベルに配置します。ただし、列の選択クエリの順序を変更しても、データセットを通じて返される列には影響しないようです。デザイナでこれを行う唯一の方法は、テーブルアダプタ内で選択されたすべての列を削除し、選択したい順序で追加し直すことです。
いくつかの条件またはチェックボックスに基づいてデータテーブルを並べ替える。PFB:-
var tableResult= $('#exampleTable').DataTable();
var $tr = $(this).closest('tr');
if ($("#chkBoxId").prop("checked"))
{
// re-draw table shorting based on condition
tableResult.row($tr).invalidate().order([colindx, 'asc']).draw();
}
else {
tableResult.row($tr).invalidate().order([colindx, "asc"]).draw();
}