如何将新行添加到datagridview?
我有DataGridView从数据源(SQL)填充数据。现在我想添加一个新行,但我不能,因为新的数据不能被添加到DataGridView的有限...如何将新行添加到datagridview?
我想:
dataGridView1.Source = null;
dataGridView1.Rows.Add("1");
,但它会清除我以前表中的数据。如何做到这一点,添加新的行而不删除以前的数据?
当您设置DataSource
property到null
,你基本上消除从DataGridView
所有数据(因为它不知道该怎么绑定了)。
您有两种选择。首先是更新底层数据源。我们假设这是一个DataTable
。在这种情况下,你会做这样的事情:
DataTable dt = dataGridView1.Source as DataTable;
dt.Rows.Add(new object[] { ... });
然后是DataGridView
会挑上的变化(注意,如果你是没有约束力的东西,没有实现INotifyCollectionChanged
interface,你将有调用ResetBindings
method以使网格刷新)。
另一个选项是让DataGridView
管理行。您可以通过手动添加使用由Rows
property返回DataGridViewRowCollection
的Add
method每个项目做到这一点:
foreach (var item in source)
{
dataGridView1.Rows.Add("1", "2", "3", ...);
}
我不会说的第二种解决方案是最佳,但它会奏效。最后,假设你绑定了一个DataTable
(或者来自底层数据源的数据的其他实现),这对于更新底层数据源(这将是一个单独的问题)没有任何作用。
简短的回答是,你没有。
当您将DataSource
设置为空时,您已打破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");
您可以添加与阵列收集项目的任何数量添加行。
Tnx,你能告诉我如何添加行到我的数据源?我有另一个DataGridView与我想添加到我的第一个GridView的数据.. – Bodi 2012-03-07 21:26:28
如果你的后备存储是一个SQL表,我想你只需要在该表中插入一个INSERT。 – 2012-03-07 21:29:27
这不是从SQL ..这是我的一些数据生成添加到第一个表并打印它;) – Bodi 2012-03-07 21:44:27