append new to gridcontrol devexpress

本文关键字:devexpress gridcontrol to new append | 更新日期: 2023-09-27 18:11:52

我正在尝试添加一个新的行到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函数现在正在尝试创建一行并将其附加到旧数据。但现在它崩溃了。它说这一行属于另一个表。我怎么才能解决这个问题呢?

append new to gridcontrol devexpress

看起来你完全替换了DataSource属性,它会告诉控件完全重新渲染。

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

另一方面,如果您正在使用WPF,请远离使用DataTable并开始使用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控件非常好。

您需要将代码更改为:

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

你已经创建了一个新的DataTable并绑定了它,这就是为什么。