【问题标题】:Reorder dataTable columns重新排序 dataTable 列
【发布时间】:2013-08-08 22:25:19
【问题描述】:

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

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

但是,我对每一列都使用它,这对我不起作用。

例如:

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

进行双重反转...

在我的代码中,我必须定义每列的位置。

有什么解决办法吗?

谢谢。

【问题讨论】:

  • 列重新排序的原因是什么?如果是出于显示原因,为什么不控制它并让源单独存在呢? DataTable 是处理显示问题的笨重地方。

标签: c# winforms


【解决方案1】:

这个过程看起来很简单,但实际上并不那么容易。关键是每当您将列的Ordinalx 更改为较低的序数a (a 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      相关资源
      最近更新 更多