2012-03-07 92 views
7

Tôi có DataGridView chứa đầy dữ liệu từ nguồn dữ liệu (SQL). Bây giờ tôi muốn một thêm hàng mới, nhưng tôi không thể, bởi vì dữ liệu mới không thể được thêm vào DataGridView bị chặn ...Làm cách nào để thêm hàng mới vào datagridview?

Tôi đã cố gắng để:

dataGridView1.Source = null; 
dataGridView1.Rows.Add("1"); 

nhưng nó xóa trước đây của tôi dữ liệu trong bảng. Làm thế nào để làm điều đó, để thêm hàng mới mà không xóa dữ liệu trước đó?

Trả lời

5

Khi bạn đặt DataSource property để null, bạn là chủ yếu loại bỏ tất cả dữ liệu từ DataGridView (vì nó không biết những gì để ràng buộc vào nữa).

Bạn có hai tùy chọn tại đây. Đầu tiên là cập nhật nguồn dữ liệu cơ bản. Giả sử rằng đó là DataTable. Trong trường hợp này, bạn muốn làm điều gì đó như:

DataTable dt = dataGridView1.Source as DataTable; 
dt.Rows.Add(new object[] { ... }); 

Và sau đó DataGridView sẽ nhận về những thay đổi (lưu ý rằng nếu bạn không gắn vào một cái gì đó mà không thực hiện INotifyCollectionChanged interface, bạn sẽ phải để gọi số ResetBindings method để mạng lưới làm mới).

Tùy chọn khác là để cho phép DataGridView quản lý các hàng. Bạn có thể làm điều này bằng tay bằng cách thêm từng hạng mục sử dụng Add method trên DataGridViewRowCollection trả về bởi các Rows property:

foreach (var item in source) 
{ 
    dataGridView1.Rows.Add("1", "2", "3", ...); 
} 

Tôi sẽ không nói là giải pháp thứ hai là tối ưu, nhưng nó sẽ làm việc. Cuối cùng, giả sử bạn đang ràng buộc với một DataTable (hoặc một số hiện thực hóa dữ liệu từ một nguồn dữ liệu cơ bản), điều này không làm bất cứ điều gì về việc cập nhật nguồn dữ liệu cơ bản (đó sẽ là một câu hỏi riêng biệt).

1

Câu trả lời ngắn gọn là, bạn không.

Khi bạn đặt DataSource thành không, bạn đã phá vỡ liên kết giữa DataGridView và nguồn dữ liệu của bạn, do đó dữ liệu của nó sẽ không được duy trì. Bạn không thể thêm hàng vào một ràng buộc DataGridView vì nó được cho là đại diện cho trạng thái của số cơ bản DataSource; bạn đang yêu cầu một cách hiệu quả. net để làm cho bảng của bạn không đồng bộ với cửa hàng sao lưu của nó, đánh bại mục đích của databinding ở nơi đầu tiên.

Nếu bạn muốn thêm hàng vào cửa hàng sao lưu, bạn nên thêm hàng vào DataSource, không phải trong số DataGridView.

+0

Tnx, bạn có thể chỉ cho tôi cách thêm hàng vào DataSource của tôi không? Tôi có một DataGridView khác với dữ liệu tôi muốn thêm vào GridView đầu tiên của mình .. – Bodi

+0

Nếu cửa hàng sao lưu của bạn là một bảng SQL, tôi tưởng tượng bạn chỉ cần làm một INSERT vào bảng đó. –

+0

Nó không phải từ SQL .. nó là một số dữ liệu của tôi tạo ra để thêm vào bảng đầu tiên và in nó;) – Bodi

0

có thể bạn muốn thực hiện thủ công và chi tiết? Một cái gì đó như thế này?

 DataSet ds = new DataSet(); 
     OleDbDataAdapter adapter = null; 
     adapter = new OleDbDataAdapter("SELECT * FROM WHERE", conn); 
     adapter.Fill(ds); 
     dataGridView1.ColumnCount = 5; //how many columns returns your SQL query? starts with 0 

     dataGridView1.Columns[0].Name = "COl-1"; 
     dataGridView1.Columns[1].Name = "COl-2"; 
     dataGridView1.Columns[2].Name = "COl-3"; 
     dataGridView1.Columns[3].Name = "COl-4"; 
     dataGridView1.Columns[4].Name = "COl-5"; 

     DataTable dt = ds.Tables[0]; 

     foreach (DataRow dr in dt.Rows) 
     { 
      dataGridView1.Rows.Add(
      (dr["COL_HEADER_NAME1"].ToString()), 
      (dr["COL_HEADER_NAME2"].ToString()), 
      (dr["COL_HEADER_NAME3"].ToString()), 
      (dr["COL_HEADER_NAME4"].ToString()), 
      (dr["COL_HEADER_NAME5"].ToString())); 
     } 
0

Bạn chỉ cần thêm hàng bằng cách sử dụng thêm phương pháp thu thập hàng

me.datagridview1.rows.add("first","second","third"); 

Bạn có thể thêm bất kỳ số lượng các mặt hàng có thu mảng.

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