我有一个包含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到数据集的变化,反之亦然?我假设不正确吗?
答案 0 :(得分:0)
您的代码块没有执行是有意义的,因为在False
之后直接调用时,它总是会评估为AcceptChanges
。
AcceptChanges()
将DataRow
的所有RowState
Added
从Modified
或UnChanged
更改为Deleted
,或Removed
更改为{{} 1}}。
因此,当您评估HasChanges()
时,在这种情况下它将返回false。
如果要对包含更改的行执行操作,则需要在调用AcceptChanges()
之前调用这些方法。
编辑:
我认为您的代码应该正确执行的简要示例:
if (notesDataSet.HasChanges())
{
DataSet editDataSet = notesDataSet.GetChanges();
notesClient.UpdatePatientNotes(editDataSet);
}
notesDataSet.AcceptChanges();
这样您仍然会调用UpdatePatientNotes
方法并让editDataSet
显示数据集中的任何更改。然后在执行if
块之后,AcceptChanges()
。
希望有所帮助。