2012-01-23 7 views
6

Các câu hỏi tương tự có thể tồn tại, nhưng không có câu hỏi nào trong số đó có vẻ hữu ích. Vì vậy, tôi sẽ cố gắng giải thích một trường hợp cụ thể hơn và xem liệu có ai có thể giúp tôi không :)Cách sắp xếp lại các cột trong chế độ xem lưới động

Đây là điều tôi có thể xem trong bảng mẫu và tôi muốn cho phép người dùng chỉ định thứ tự các cột đó được thể hiện. Vì vậy, người dùng tạo chế độ xem và quyết định cột nào sẽ hiển thị đầu tiên, thứ hai, v.v.

Vì vậy, về cơ bản, tôi cần phải thay đổi thứ tự của các cột ngay sau khi lưới được tải dữ liệu.

Âm thanh dễ dàng huh? Vâng, rõ ràng là không. Ít nhất thì tôi chưa thể đạt được điều đó.

Một số ghi chú: - Tất nhiên tôi có AutogenerateColumn được đặt thành false. - Thay đổi thứ tự cột chọn sql sẽ không hoạt động vì mục trước đó. - Và tôi không muốn tạo các cột theo mã.

Bất kỳ ý tưởng nào?

+0

Dưới đây là cách sắp xếp lại các cột động: http://stackoverflow.com/a/28611217/215752 – Hogan

Trả lời

18

Bạn có thể sửa đổi bộ sưu tập Cột của GridView trong mã phía sau. Vì vậy, một cách để làm điều này là xóa cột khỏi vị trí hiện tại của nó trong bộ sưu tập và sau đó chèn lại nó vào vị trí mới.

Ví dụ, nếu bạn muốn di chuyển cột thứ hai là cột đầu tiên bạn có thể làm:

var columnToMove = myGridView.Columns[1]; 
myGridView.Columns.RemoveAt(1); 
myGridView.Columns.Insert(0, columnToMove); 

Nếu bạn cần di chuyển chúng xung quanh một cách ngẫu nhiên, sau đó bạn có thể muốn thử để clone bộ sưu tập hiện trường, xóa bộ sưu tập trong GridView, và sau đó lắp lại tất cả chúng theo thứ tự bạn muốn họ được.

var columns = myGridView.Columns.CloneFields(); 
myGridView.Columns.Clear(); 
myGridView.Columns.Add(columns[2]); 
myGridView.Columns.Add(columns[0]); 
etc.. 

tôi không chắc chắn 100% cho dù tất cả điều này sẽ làm việc sau khi liên kết với dữ liệu , vì vậy, trừ khi có lý do để không, tôi sẽ làm điều đó trong Page_Init hoặc một nơi nào đó trước khi bindin g.

+0

Điều đó hiệu quả! Nhưng chỉ một điều ... Tôi có một nút trên lưới đó, nơi tôi áp dụng một số logic trong sự kiện OnRowCommand. Vâng, bây giờ, sau khi các hàng được sắp xếp lại, phương thức đó không bao giờ được thực thi và một số cột trống sau khi tôi nhấn nút ... – Ragalante

+0

Tôi đã tìm thấy bằng cách sử dụng 'myGridView.Columns.CloneFields();' tạo một bản sao của tất cả các đối tượng cột cũng (có thể là một vấn đề). Ví dụ, nếu bạn có cột tùy chỉnh của riêng bạn kế thừa từ 'BoundField' thì nó sẽ nhân bản đối tượng của bạn chỉ với một' BoundField'. Để khắc phục điều này, hãy làm: 'myGridView.Columns.OfType (). ToList();' vì điều này sẽ chỉ tạo một bộ sưu tập mới trong khi duy trì các tham chiếu đến các đối tượng cột ban đầu. –