2012-03-07 85 views
7

我有DataGridView從數據源(SQL)填充數據。現在我想添加一個新行,但我不能,因爲新的數據不能被添加到DataGridView的有限...如何將新行添加到datagridview?

我想:

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

,但它會清除我以前表中的數據。如何做到這一點,添加新的行而不刪除以前的數據?

回答

5

當您設置DataSource propertynull,你基本上消除DataGridView所有數據(因爲它不知道該怎麼綁定了)。

您有兩種選擇。首先是更新底層數據源。我們假設這是一個DataTable。在這種情況下,你會做這樣的事情:

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

然後是DataGridView會挑上的變化(注意,如果你是沒有約束力的東西,沒有實現INotifyCollectionChanged interface,你將有調用ResetBindings method以使網格刷新)。

另一個選項是讓DataGridView管理行。您可以通過手動添加使用由Rows property返回DataGridViewRowCollectionAdd method每個項目做到這一點:

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

我不會說的第二種解決方案是最佳,但它會奏效。最後,假設你綁定了一個DataTable(或者來自底層數據源的數據的其他實現),這對於更新底層數據源(這將是一個單獨的問題)沒有任何作用。

1

簡短的回答是,你沒有。

當您將DataSource設置爲空時,您已打破DataGridView與您的數據源之間的鏈接,因此其數據將不會被保留。您不能將行添加到綁定DataGridView,因爲它應該表示底層DataSource的狀態;你有效地要求.net讓你的桌子與其支持存儲不同步,首先打破了數據綁定的目的。

如果要將行添加到後備存儲區,則應該在DataSource中添加一行,而不是在DataGridView中添加一行。

+0

Tnx,你能告訴我如何添加行到我的數據源?我有另一個DataGridView與我想添加到我的第一個GridView的數據.. – Bodi 2012-03-07 21:26:28

+0

如果你的後備存儲是一個SQL表,我想你只需要在該表中插入一個INSERT。 – 2012-03-07 21:29:27

+0

這不是從SQL ..這是我的一些數據生成添加到第一個表並打印它;) – Bodi 2012-03-07 21:44:27

0

也許你想手動和詳細地做到這一點?像這樣?

 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

您只需通過添加行收集的方法

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

您可以添加與陣列收集項目的任何數量添加行。

相關問題