我用我的重新排序的dataTable列:重新排序的dataTable列
dataTable.Columns[int x].SetOrdinal(int y)
但是,我用它的每一列,並且不爲我工作。
例如:
dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
使雙反轉...
而且在我的代碼,我必須定義每列必須。
有沒有解決這個問題的方法?
謝謝。
我用我的重新排序的dataTable列:重新排序的dataTable列
dataTable.Columns[int x].SetOrdinal(int y)
但是,我用它的每一列,並且不爲我工作。
例如:
dataTable.Columns[0].SetOrdinal(1);
dataTable.Columns[1].SetOrdinal(0);
使雙反轉...
而且在我的代碼,我必須定義每列必須。
有沒有解決這個問題的方法?
謝謝。
這個過程看起來很簡單,但並不那麼容易。點是每當從x
更改列的Ordinal
到較低序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
您應該從列名稱數組中以列的順序更改列順序,每列名稱以正確的順序排列在數組中。 欲瞭解更多信息,請訪問此鏈接:How to change DataTable columns order
重新排列列的原因是什麼?如果是出於顯示的原因,爲什麼不控制它並讓源碼單獨出來? DataTable是處理顯示問題的一個笨重的地方。 – DonBoitnott