我在Windows窗体上有一个主 - 详细网格视图。我是一个非常简单的存储库(代码中的repo),它查询数据库以获取DataTables。
首先,我加载数据并定义一个像你在LoadData()方法中看到的关系。接下来,在编辑主表后,我想刷新视图数据源。这是未实现的RefreshData();方法。如果我在编辑后刷新我需要绑定源不要丢失"当前"行。
以下是代码:
public void LoadData()
{
//define the Bindingsource and 2 Datatables.
binder = new BindingSource();
tbTaxPayers = repo.GetTaxPayersDataTable(-1);
tbLinkedOrganizations = repo.GetTaxPayersLinkedOrganizations();
//create a dataset to define the relation so that the view can pick it up
ds = new DataSet();
ds.Tables.Add(tbTaxPayers);
ds.Tables.Add(tbLinkedOrganizations);
ds.Relations.Add("LinkedOrganizations", tbTaxPayers.Columns["CLI_ID"], tbLinkedOrganizations.Columns["LCC_CLI_ID_PARENT"]);
//set datasource to the main table.
binder.DataSource = tbTaxPayers;
view.LoadData(binder);
}
public void RefreshData()
{
// how to refresh without overhead ? and without losing focus if I just edit ?
}
编辑:
通过执行下一个代码它可以工作但我必须在每次刷新时创建一个新的DataSet。它闻起来让我几乎与我的LoadData()方法重复。
public void RefreshData()
{
tbTaxPayers = repo.GetTaxPayersDataTable(-1);
tbLinkedOrganizations = repo.GetTaxPayersLinkedOrganizations();
ds = new DataSet();
ds.Tables.Add(tbTaxPayers);
ds.Tables.Add(tbLinkedOrganizations);
ds.Relations.Add("LinkedOrganizations", tbTaxPayers.Columns["CLI_ID"], tbLinkedOrganizations.Columns["LCC_CLI_ID_PARENT"]);
binder.DataSource = tbTaxPayers;
}