这个过程看起来很简单,但实际上并不那么容易。关键是每当您将列的Ordinal 从x 更改为较低的序数a (a 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