1

我有一个 Windows 窗体,其中包含我的 datagridview 对象,我使用以下代码设置此 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# 新手,使用我之前的编程经验,我假设将 dgv 与数据源绑定会显示 dgv 到数据集的变化,反之亦然?我的假设不正确吗?

4

1 回答 1

0

你的代码块没有执行是有道理的,因为它总是会FalseAcceptChanges.

AcceptChanges()将任何DataRow'sRowStateAdded或更改ModifiedUnChanged或。 DeletedRemoved

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

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

编辑:

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

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

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

希望能有所帮助。

于 2013-05-21T21:44:21.070 回答