代码之家  ›  专栏  ›  技术社区  ›  Denis Biondic

数据绑定、具有数据关系的数据集以及从数据库刷新单个数据表

  •  0
  • Denis Biondic  · 技术社区  · 17 年前

    简而言之:我有一个数据集,里面有多个数据表,它们通过多个数据关系连接。我在这个数据集上使用数据绑定创建了一个表单,可以说它相当复杂。

    接下来是场景:表单的主要目的是插入新记录。要插入它,必须设置各种父子关系。数据绑定可以很好地工作,但接下来的问题是:当用户想要为其中一个父子关系输入一个新的“子”时,新表单打开,他输入它,yada-yada-yada,-然后它就工作了。问题是-我应该如何将新数据恢复到原始形式,以显示在父子组合框中?

    我知道的一种方法是刷新整个表单;但我正在寻找一种解决方案,只刷新包含该数据的数据表。我尝试从DB中获取一个新的DataTable,其中包含新数据,并将其与DataSet中的DataTable合并,但不起作用:“一个子行有多个父行”引发异常:

    // basically just a Select * using dataadapter,
    // nothing programmatically added 
    DataTable table = tableModule.GetPlainTable(); 
    existingDataSet.Tables["tableName"].Merge(table);
    

    我正在尝试做的一个等效示例是创建一个带有客户组合框的订单。在组合框的右侧,有一个“添加”按钮,打开一个新的“添加客户”表单。只需提及(可能是相关的),在数据库中,“客户”表与“城市”表是相关的,并且数据在订单表单上的数据绑定中也是链接的。。。

    编辑:我能想到的一个解决方案是“手动”在新的DataTable中循环,并在DataSet中查找不在原始DataTable中的所有行,但我不确定这是否可行。。。

    1 回复  |  直到 17 年前
        1
  •  0
  •   Denis Biondic    17 年前

    嗯,我解决了第二种形式插入时手动复制行的问题。。。我使用对象集合(行项目数组)创建了一个事件,在第一种形式中,我在该事件上注册了一个处理程序,在该处理程序中,我通过以下方式手动添加新行:

    data.Tables["tableName"].Rows.Add(e.RowItems);
    

    之后,我对该行调用AcceptChanges(),使其状态保持不变,而不是添加。。。

    推荐文章