如何将新行添加到datagridview?

问题描述:

我有DataGridView从数据源(SQL)填充数据。现在我想添加一个新行,但我不能,因为新的数据不能被添加到DataGridView的有限...如何将新行添加到datagridview?

我想:

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

,但它会清除我以前表中的数据。如何做到这一点,添加新的行而不删除以前的数据?

当您设置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(或者来自底层数据源的数据的其他实现),这对于更新底层数据源(这将是一个单独的问题)没有任何作用。

简短的回答是,你没有。

当您将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

也许你想手动和详细地做到这一点?像这样?

 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())); 
     } 

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

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

您可以添加与阵列收集项目的任何数量添加行。