我正在尝试将新行添加到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函数现在正在尝试创建一行并将其附加到旧数据。但它现在崩溃了。它说这行属于另一个表。我该如何解决?
答案 0 :(得分:1)
看起来您正在完全替换DataSource属性,该属性将告诉控件完全重新渲染。
将新行添加到现有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()
是psudocode,因为我不太了解DevExpress WinForms控件。
答案 1 :(得分: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();
}
我认为花一些时间阅读Object Orientation Principles
是值得的您仍在不必要地创建新的DataTable
,并将该行添加到该实例,而不是已绑定到网格控件实例的DataTable
。
答案 2 :(得分:0)
你已经创建了一个新的DataTable并与它绑定,这就是为什么..