我正在使用以下方法重新排序我的dataTable列:
dataTable.Columns[int x].SetOrdinal(int y)
Run Code Online (Sandbox Code Playgroud)
但是,我将它用于每一列,这对我不起作用.
例如 :
dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
Run Code Online (Sandbox Code Playgroud)
进行双反转......
在我的代码中,我必须定义每列必须在哪里.
这有什么解决方案吗?
谢谢.
这个过程看起来很简单,但实际上并不那么容易。问题的关键是每次修改Ordinal从柱的x一个较低的序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
}
}
Run Code Online (Sandbox Code Playgroud)
或者您也可以ColumnName按照您想要的顺序准备一份您的清单,如下所示:
List<string> columns = new List<string>{"Column2","Column1","Column5","Column3","Column6","Column4"};
//The same code as above
Run Code Online (Sandbox Code Playgroud)