datagridview更改不会反映在数据集关系中

时间:2013-05-21 20:49:32

标签: c#

我有一个包含datagridview对象的Windows窗体,我使用以下代码设置此dgv对象的数据源:

private void Form1_Load(object sender, EventArgs e)
{
    notesDataSet = notesClient.GetPatientNotes("6236321.00");

    dataGridView1.DataSource = notesDataSet.Tables[0];
}

notesClient.GetPatientNotes()n检索数据并返回正确的数据集。作为一个问题 事实上,我在我的dgv中看到了数据。问题是在我的dgv中更改值并在我的保存按钮中使用以下代码后:

notesDataSet.AcceptChanges();
if (notesDataSet.HasChanges())
   {
       DataSet editDataSet = notesDataSet.GetChanges();
       notesClient.UpdatePatientNotes(editDataSet);
   }

if块甚至没有执行,就像根本没有对数据集进行任何更改一样。现在我知道那里 没有直接更改数据集,但不是将dgv与数据源绑定的全部目的 对dgv的任何更改都将反映在数据集中,我错过了我的更改未被转移的内容 到我的数据集。我是c#的新手,并且使用我之前的编程exp我假设将dgv与数据源绑定 将显示dgv到数据集的变化,反之亦然?我假设不正确吗?

1 个答案:

答案 0 :(得分:0)

您的代码块没有执行是有意义的,因为在False之后直接调用时,它总是会评估为AcceptChanges

AcceptChanges()DataRow的所有RowState AddedModifiedUnChanged更改为Deleted,或Removed更改为{{} 1}}。

因此,当您评估HasChanges()时,在这种情况下它将返回false。

如果要对包含更改的行执行操作,则需要在调用AcceptChanges()之前调用这些方法。

编辑:

我认为您的代码应该正确执行的简要示例:

    if (notesDataSet.HasChanges())
    {
        DataSet editDataSet = notesDataSet.GetChanges();
        notesClient.UpdatePatientNotes(editDataSet);
    }
    notesDataSet.AcceptChanges();

这样您仍然会调用UpdatePatientNotes方法并让editDataSet显示数据集中的任何更改。然后在执行if块之后,AcceptChanges()

希望有所帮助。