C# 对数据表列重新排序

C# 对数据表列重新排序,c#,winforms,C#,Winforms,我正在使用以下命令对数据表列重新排序: dataTable.Columns[int x].SetOrdinal(int y) 然而,我在每一列中都使用它,这对我来说并不适用 例如: dataTable.Columns[0].SetOrdinal(1); dataTable.Columns[1].SetOrdinal(0); 做双反转 在我的代码中,我必须定义每一列必须在哪里 有什么解决办法吗 谢谢。您应该从列名数组更改循环中的列顺序,每个列名在数组中的顺序都是正确的。 有关更多信息,请访问此

我正在使用以下命令对数据表列重新排序:

dataTable.Columns[int x].SetOrdinal(int y)
然而,我在每一列中都使用它,这对我来说并不适用

例如:

dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
做双反转

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

有什么解决办法吗


谢谢。

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

此过程看似简单,但实际上并不简单。关键是,每当您将列的
序号
x
更改为较低的
a
(ax
更改为较高的序号
b
(b>x),则序号介于
a
x
之间的所有列都将右移然后,序号在
x
b
之间的所有列将向左移动。每次更改列的序号时,我们都必须执行一些更新

您可以按所需顺序准备列
索引的列表,如下所示:

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
   }
}    
List<string> columns = new List<string>{"Column2","Column1","Column5","Column3","Column6","Column4"};
//The same code as above

重新排列列的原因是什么?如果是出于显示的原因,为什么不控制它,而不使用源代码呢?
DataTable
是处理显示问题的一个笨拙的地方。