为什么没有';t从datagridview将更改保存到datatable中
本文关键字:保存 datatable datagridview 为什么 | 更新日期: 2023-09-27 18:24:31
我已经将datagridview
与datatable
绑定(Growns)。我的主要目标是,用户可以使用datagridview
(dataGridView1)填充和更新数据,当单击button
SAVE时,所有数据都将保存到数据表中,因为我需要它来做进一步的工作。
一切正常,排除了将数据保存到数据表的情况。我做错了什么?
这是我的代码:
private void Form2_Load(object sender, EventArgs e) {
// TODO: This line of code loads data into the 'tekmovalecDataSet.Odrasli' table. You can move, or remove it, as needed.
this.grownsTableAdapter.Fill(this.competitorDataSet.Odrasli);
}
private void buttonSave_Click(object sender, EventArgs e) {
if (EmptySpace())
{
CompetitorDataSet.OdrasliRow newGrownsRow = competitorDataSet.Growns.NewGrownsRow();
newGrownsRow.StN = textStN.Text;
newGrownsRow.Name = textN.Text;
newGrownsRow.Surname = textSN.Text;
newGrownsRow.Club = textC.Text;
newGrownsRow.YBirth = textYB.Text;
competitorDataSet.Growns.Rows.Add(OdrasliNova);
competitorDataSet.Growns.AcceptChanges();
this.dataGridView1.DataSource = competitorDataSet.Growns;
this.Validate();
this.grownsBindingSource.EndEdit();
if (dataGridView1.BindingContext[competitorDataSet.Growns] != null)
{
dataGridView1.BindingContext[competitorDataSet.Growns].EndCurrentEdit();
}
this.grownsTableAdapter.Update(competitorDataSet.Odrasli);
this.grownsTableAdapter.Adapter.AcceptChangesDuringUpdate = true;
}
else
{
MessageBox.Show("Fill ALL data about competitor!");
}
}
附言:当我手动填写datatable
时,在表格上打开的datagridview
被填写,所以datatable
和datagridview
是连接的,我想。。。
p.S.2.:bool EmptySpace
运行良好。
设置this.Update(competitorDataSet.Odrasli);
时,TableAdapter
会将DataTable
(新闻、删除、更新的行)中的更改更新到数据库中。
由于您在TableAdapter.Update
之前调用了competitorDataSet.Growns.AcceptChanges();
,因此表中的所有更改都已被接受,TableAdapter没有可更新的内容。
所以只需删除
competitorDataSet.Growns.AcceptChanges();
此外,如果您在grownsTableAdapter.Update(competitorDataSet.Odrasli);
之前设置this.grownsTableAdapter.Adapter.AcceptChangesDuringUpdate = true
,则更改将被接受,因此您不需要自己接受更改(在我看来,默认值为True,因此我不确定是否需要此行)
您没有使用datagridview编辑数据,而是使用文本框更改数据集,我认为这是您手动填充的示例。。。
我假设您要用于更新数据库的代码从以下行开始:
this.dataGridView1.DataSource = competitorDataSet.Growns;
我怀疑您的问题在以下代码块中(代码注释中的解释):
//why rebind the datagridview?
//this line should be removed
this.dataGridView1.DataSource = competitorDataSet.Growns;
//why call this here? validation should be done prior
//to adding the new row to the datatable
//this line should be removed
this.Validate();
this.grownsBindingSource.EndEdit();
if (dataGridView1.BindingContext[competitorDataSet.Growns] != null)
{
dataGridView1.BindingContext[competitorDataSet.Growns].EndCurrentEdit();
}
//reverse the order of these 2 lines
this.grownsTableAdapter.Update(competitorDataSet.Odrasli);
this.grownsTableAdapter.Adapter.AcceptChangesDuringUpdate = true;
/* like this:
this.grownsTableAdapter.Adapter.AcceptChangesDuringUpdate = true;
this.grownsTableAdapter.Update(competitorDataSet.Odrasli);
*/
如果这不能解决您的问题,请发布您的数据网格视图的绑定代码。