2013-08-07 163 views
5

我用我的重新排序的dataTable列:重新排序的dataTable列

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

但是,我用它的每一列,并且不为我工作。

例如:

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

使双反转...

而且在我的代码,我必须定义每列必须。

有没有解决这个问题的方法?

谢谢。

+0

重新排列列的原因是什么?如果是出于显示的原因,为什么不控制它并让源码单独出来? DataTable是处理显示问题的一个笨重的地方。 – DonBoitnott

回答

4

这个过程看起来很简单,但并不那么容易。点是每当从x更改列的Ordinal到较低序a(一个< X),则所有与ax之间序数的列将被向右移位,如果x被改变为较高序b(B> x),那么xb之间的所有列将被向左移动。每次更改列的序号时,我们都必须执行一些更新。

你可以在你想要的顺序准备列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 
4

您应该从列名称数组中以列的顺序更改列顺序,每列名称以正确的顺序排列在数组中。 欲了解更多信息,请访问此链接:How to change DataTable columns order