重新排序dataTable列

时间:2013-08-07 13:46:44

标签: c# winforms

我正在使用以下方法重新排序我的dataTable列:

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

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

例如:

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

进行双反转......

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

有没有解决方案?

谢谢。

2 个答案:

答案 0 :(得分:4)

您应该从列名称数组循环更改列顺序,每个列名称在数组中按正确顺序放置。 有关更多信息,请访问以下链接:How to change DataTable columns order

答案 1 :(得分:4)

这个过程看起来很简单但并不那么容易。重点是,只要您将列的Ordinalx更改为较低的序数a(a< x),然后将所有列更改为a和{之间的序数如果将x更改为更高的序数x(b> x),则{1}}将向右移动,然后bx之间的所有列都会被调整将向左移动。每次更改列的序号时,我们都必须执行一些更新。

您可以按照自己想要的顺序准备列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