如何向datagridview添加新行?

我有DataGridView填充数据源(SQL)的数据。 现在我想添加一个新行,但我不能,因为新数据无法添加到有界DataGridView …

我试图:

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

但它清除了我之前在表格中的数据。 怎么做,添加新行而不删除以前的数据?

当您将DataSource属性设置为null ,您实际上是从DataGridView删除所有数据(因为它不知道要绑定到什么)。

你有两个选择。 第一种是更新基础数据源。 我们假设它是一个DataTable 。 在这种情况下,您可以执行以下操作:

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

然后DataGridView将接收更改(请注意,如果您没有绑定到未实现INotifyCollectionChanged接口的内容 ,则必须调用ResetBindings方法以使网格刷新)。

另一个选择是让DataGridView管理行。 您可以通过使用Rows属性返回的DataGridViewRowCollection上的Add方法手动添加每个项来执行此操作:

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

我不会说第二种解决方案是最佳的 ,但它会起作用。

最后,假设您绑定到DataTable (或来自底层数据源的数据的其他实现),这对更新底层数据源没有任何作用(这将是一个单独的问题)。

简短的回答是,你没有。

当您将DataSource设置为null时,您已经破坏了DataGridView与数据源之间的链接,因此其数据将不会保留。 您不能向绑定的DataGridView添加行,因为它应该表示基础DataSource的状态; 你有效地要求.net使你的表与它的后备存储不同步,首先打败了数据绑定的目的。

如果要向后备存储添加行,则应在DataSource添加一行,而不是在DataGridView

也许你想手动和详细? 像这样的东西?

  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"); 

您可以使用数组集合添加任意数量的项目。