2013-08-07 44 views
5

Tôi đang sắp xếp lại các cột DataTable của tôi sử dụng:cột Sắp xếp lại DataTable

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

Tuy nhiên, tôi sử dụng nó cho mỗi cột và điều đó không làm việc cho tôi.

Ví dụ:

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

Làm cho một đảo ngược đôi ...

Và trong mã của tôi, tôi phải xác định trong đó mỗi cột phải.

Có giải pháp nào cho vấn đề này không?

Cảm ơn bạn.

+0

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

Trả lời

4

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 ax 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ố xb 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 
4

Bạn nên thay đổi thứ tự cột trong một vòng lặp từ mảng tên cột mà mỗi tên cột được đặt theo thứ tự đúng trong mảng. Để biết thêm thông tin, hãy truy cập liên kết này: How to change DataTable columns order

Các vấn đề liên quan