我用我的重新排序的dataTable列:重新排序的dataTable列
dataTable.Columns[int x].SetOrdinal(int y)
但是,我用它的每一列,并且不为我工作。
例如:
dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
使双反转...
而且在我的代码,我必须定义每列必须。
有没有解决这个问题的方法?
谢谢。
我用我的重新排序的dataTable列:重新排序的dataTable列
dataTable.Columns[int x].SetOrdinal(int y)
但是,我用它的每一列,并且不为我工作。
例如:
dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
使双反转...
而且在我的代码,我必须定义每列必须。
有没有解决这个问题的方法?
谢谢。
这个过程看起来很简单,但并不那么容易。点是每当从x
更改列的Ordinal
到较低序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
您应该从列名称数组中以列的顺序更改列顺序,每列名称以正确的顺序排列在数组中。 欲了解更多信息,请访问此链接:How to change DataTable columns order
重新排列列的原因是什么?如果是出于显示的原因,为什么不控制它并让源码单独出来? DataTable是处理显示问题的一个笨重的地方。 – DonBoitnott