如何向datagridview添加新行?

时间:2012-03-07 20:35:53

标签: c# datagridview

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

我试图:

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

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

4 个答案:

答案 0 :(得分:6)

当您将DataSource property设置为null时,您实际上是从DataGridView中移除所有数据(因为它不知道要绑定到什么内容)了)。

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

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

然后DataGridView会接受更改(请注意,如果您没有绑定到未实现INotifyCollectionChanged interface的内容,则必须调用ResetBindings method让网格刷新)。

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

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

我不会说第二个解决方案是最优,但它会起作用。

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

答案 1 :(得分:1)

简短的回答是,你没有。

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

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

答案 2 :(得分: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()));
        }

答案 3 :(得分:0)

您只需使用行集合的添加方法

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

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