5

次を使用してdataTable列を並べ替えています:

dataTable.Columns[int x].SetOrdinal(int y)

ただし、各列に使用していますが、うまくいきません。

例えば ​​:

dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);

二重反転を行います...

私のコードでは、各列がどこにある必要があるかを定義する必要があります。

これに対する解決策はありますか?

ありがとうございました。

4

2 に答える 2

5

このプロセスは簡単に思えますが、実際にはそれほど簡単ではありません。ポイントはOrdinal、列の をよりx低い序数a(a < x) に変更すると、aとの間の序数を持つすべての列xが右にシフトxされます。 がより高い序数b(b > x) に変更された場合、と の間xの序数はb左にシフトされます。列の序数が変更されるたびに、何らかの更新を実行する必要があります。

indices次のように、必要な順序で列のリストを準備できます。

List<int> indices = new List<int>{1,2,0,7,4,5,3,6};

for(int i = 0; i < indices.Count; i++){
   dataTable.Columns[indices[i]].SetOrdinal(i);
   if(indices[i] > i){
      for(int j = i; j < indices.Count; j++)
         if(indices[j] >= i && indices[j] < indices[i]) indices[j]++;//Right shifted                       
   }
   else if(indices[i] < i){
      for(int j = i; j < indices.Count; j++)
         if(indices[j] >= indices[i] && indices[j] < i) indices[j]--;//Left shifted
   }
}    

ColumnNameまたは、次のように、必要な順序でリストを準備することもできます。

List<string> columns = new List<string>{"Column2","Column1","Column5","Column3","Column6","Column4"};
//The same code as above
于 2013-08-07T14:25:02.687 に答える
4

各列名が正しい順序で配列に配置された列名の配列から、ループで列の順序を変更する必要があります。詳細については、このリンクにアクセスしてください: DataTable 列の順序を変更する方法

于 2013-08-07T14:04:37.257 に答える