【发布时间】:2017-03-10 07:13:56
【问题描述】:
我正在开发一个包含 2 个类似数据网格的 winform,每个数据网格都将其数据源设置为同一张表的不同实例。出于测试目的,表格中既有不同的记录也有相似的记录,每条记录填充不同的单元格。
1- 调用 Datatable.Merge 时,目标表获取丢失的行,但初始行没有从源表的相应单元格更新其空单元格。
2- 在目标表上调用 Datatable.RejectChanges 时,合并添加的行没有被删除,这是一个问题,但是这一次,初始行的空单元格从相应的单元格中正确更新源表,我希望在合并时发生。
用于填表的函数:
private bool OpenFile(Datatable table)
{
if (OFD.ShowDialog() == DialogResult.OK) // OFD is OpenFileDialog
{
if (UserPrompt.ShowDialog() == DialogResult.OK) // UserPrompt is a custom input dialog for user credentials
{
try
{
// code to fill table not shown for readability, works well anyway
table.AcceptChanges(); // otherwise all the records are deleted after RejectChanges, including the initial ones
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Operation Canceled", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
return false;
}
合并函数:
private void menuMerge1_Click(object sender, EventArgs e)
{
Table1.Merge(Table2, true);
if (MessageBox.Show("Table 2 merged to table 1. Save changes? Choosing no will cancel the merging.", "Keep or Discard Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.OK)
Save(Table1); // saving to file, custom function
else Table1.RejectChanges();
}
先调用OpenFile函数,再调用merge,就这样了。
我试过了:
- 刷新 DataGridView。
- 重置 DataGridView 的 DataSource。
- 合并后在目标上调用 AcceptChanges。
提前感谢您的任何见解!
【问题讨论】:
-
我更好的方法是先询问用户然后进行合并,而不是其他方式。您将为大型表节省宝贵的处理器时间。
-
@Abdul Rehman 说:是的。一旦找到合并表格的可靠方法,我将立即更改它:)