2009-01-31 35 views
7

Khi ứng dụng được chạy, DataGridView được liên kết với một số DataTable. Sau đó, tôi thêm nhiều cột hơn vào DataTable theo chương trình và được phản ánh trong dữ liệu cơ bản - tức là cột Các giá trị như chúng phải như vậy. Tuy nhiên, điều này không được phản ánh trong số DataGridView. Thay vào đó, các cột được nối vào tập hợp được tạo ban đầu.Thay đổi thứ tự cột trong DataTable được liên kết với DataGridView không phản ánh trong chế độ xem

Ví dụ này cho thấy,

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public DataTable data = new DataTable(); 

    private void button1_Click(object sender, EventArgs e) 
    { 

     this.dataGridView1.DataSource = data; 
     for (int i = 0; i < 5; i++) 
     { 
      this.data.Columns.Add(i.ToString()); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     DataColumn foo = new DataColumn(); 
     this.data.Columns.Add(foo); 
     foo.SetOrdinal(0); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     foreach (DataColumn tmpCol in this.data.Columns) 
     { 
      Console.WriteLine("{0} : {1}", tmpCol.ColumnName, tmpCol.Ordinal); 
     } 
    } 
} 

Nút 1 tạo ra các cột, nút 2 cho biết thêm một cột và đặt thứ tự 0 để nó phải là đầu tiên trong lưới, nút 3 hiển thị ordinals của các cột và cho thấy họ là cách họ nên ở trong số DataTable.

Trả lời

9

Đó chỉ là cách hoạt động của DataGridView; với các cột tạo tự động được bật, các cột phụ (chưa được ánh xạ) được nối vào cuối. Bạn có thể unbind và tái liên kết để sửa chữa nó; đặt DataSource thành null và quay lại bảng:

this.dataGridView1.DataSource = null; 
this.dataGridView1.Columns.Clear(); 
this.dataGridView1.DataSource = data; 
1

Tôi gặp sự cố tương tự và đã giải quyết nó với thuộc tính DataGridViewColumn.DisplayIndex.

dgvData.Columns["COLUMN_NAME"].DisplayIndex = 0; // will move your custom column to first position 
Các vấn đề liên quan