Quá trình này có vẻ dễ dàng nhưng không thực sự dễ dàng như vậy. Vấn đề là bất cứ khi nào bạn thay đổi Ordinal
của một cột từ x
đến một thấp thứ a
(một < x) sau đó tất cả các cột với ordinals giữa a
và x
sẽ được chuyển ngay, nếu x
được thay đổi thành một cao thứ b
(b> x) thì tất cả các cột có các số thứ tự giữa các số x
và b
sẽ bị dịch chuyển sang trái. Chúng ta phải thực hiện một số cập nhật mỗi khi một thứ tự của cột được thay đổi.
Bạn có thể chuẩn bị một danh sách các cột của bạn indices
theo thứ tự bạn muốn, một cái gì đó như thế này:
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
}
}
Hoặc bạn cũng có thể chuẩn bị một danh sách các ColumnName
của bạn theo thứ tự bạn muốn, một cái gì đó như thế này:
List<string> columns = new List<string>{"Column2","Column1","Column5","Column3","Column6","Column4"};
//The same code as above
Nguồn
2013-08-07 14:25:02
Lý do sắp xếp lại các cột là gì? Nếu đó là vì lý do hiển thị, tại sao không kiểm soát điều đó và để nguồn một mình? 'DataTable' là một nơi chật chội để đối phó với các vấn đề hiển thị. – DonBoitnott