5

我正在使用以下命令重新排序我的 dataTable 列:

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

但是,我将它用于每一列,这对我不起作用。

例如 :

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

进行双重反转...

在我的代码中,我必须定义每列必须在哪里。

有什么解决办法吗?

谢谢你。

4

2 回答 2

5

这个过程看起来很容易,但实际上并不那么容易。关键是,每当您将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
于 2013-08-07T14:25:02.687 回答
4

您应该从列名数组的循环中更改列顺序,每个列名在数组中以正确的顺序放置。有关更多信息,请访问此链接:如何更改 DataTable 列顺序

于 2013-08-07T14:04:37.257 回答