0

我正在尝试通过单击按钮将新行添加到 datagridview 中以进行学习。当我单击按钮时,它会删除旧数据并添加新行。但我想将它附加到网格

这是我的 form_load 函数,它从数据库中获取数据并填充网格。

private void Form1_Load(object sender, EventArgs e)
    {
        SqlConnection connection = new SqlConnection("Data Source=ARIF-BILGISAYAR;Initial Catalog=RotanetLocal;Persist Security Info=True;User ID=sa;Password=12345");
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM TestTable", connection);
        DataSet sourceDataSet = new DataSet();
        adapter.Fill(sourceDataSet);
        gridControl1.DataSource = sourceDataSet.Tables[0];

    }

这是我的按钮事件,它应该在网格中附加一行,但它会删除旧数据并插入新数据

private void btn_update_Click(object sender, EventArgs e)
    {
        DataTable dtOperation = new DataTable();

        var myOriginalDataSource = (DataTable)gridControl1.DataSource;
        var dr = myOriginalDataSource.NewRow();
        dr["id"] = 1;
        dr["name"] = "Gelen Havale";
        dr["lname"] = "Gelen Havale";
        dtOperation.Rows.Add(dr);

        gridControl1.Refresh();
    }

我的 btn_update_click 函数现在正在尝试创建一行并将其附加到旧数据中。但它现在崩溃了。它说这一行属于另一个表。我该如何解决?

4

3 回答 3

1

您需要将代码更改为:

private void btn_update_Click(object sender, EventArgs e)
{
    var myOriginalDataSource = (DataTable)gridControl1.DataSource;
    var dr = myOriginalDataSource.NewRow();

    dr["id"] = 1;
    dr["name"] = "Gelen Havale";
    dr["lname"] = "Gelen Havale";

    gridControl1.Refresh();
}

我认为值得花一些时间阅读面向对象原则

您仍在DataTable不必要地创建一个新行并将该行添加到该实例,而不是DataTable已经将数据绑定到您的网格控件实例。

于 2013-05-03T08:55:25.423 回答
1

看起来您正在完全替换 DataSource 属性,该属性将告诉控件完全重新呈现。

将新行添加到现有 DataSource 中,然后调用该Refresh()方法。

另一方面,如果您使用的是 WPF,请远离使用DataTable并开始使用 an ObservableCollection<T>

    private void btn_update_Click(object sender, EventArgs e)
    {
        var myOriginalDataSource = gridControl1.DataSource;
        var dr = myOriginalDataSource.NewRow();

        dr["id"] = 1;
        dr["name"] = "Gelen Havale";
        dr["lname"] = "Gelen Havale";

        gridControl1.Refresh();
    }

Refresh()是伪代码,因为我不太了解 DevExpress WinForms 控件。

于 2013-05-03T07:57:17.317 回答
0

您已经创建了一个新的 DataTable 并与之绑定,这就是为什么..

于 2013-05-03T07:59:21.820 回答