このプロセスは簡単に思えますが、実際にはそれほど簡単ではありません。ポイントは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