C#在DataGridView中使用两个DataTable而不会失去更新数据库的能力

时间:2014-05-22 13:58:49

标签: c# sql database datagridview datatable

好的,这是我的问题。

我的数据库中有两个表(SaleInfo和ItemInfo)。我需要将它们组合起来填充我的DataGridView。首先,我在SQL Select中使用LEFT JOIN加入了两个表。这很好用,我可以填充我的DataGridView。

但是,该程序的重​​点是使用DataGridView编辑数据库的记录。因为我在select语句中使用LEFT JOIN,所以我无法通过DataAdapter将更改应用于数据库。

实际上,只会更新SaleInfo表(包含ItemInfo表中记录的列是只读的)。但是,需要查看ItemInfo表。

在线的一个地方我发现有两个表(一个用于阅读,一个用于更新)的建议,但我不知道如何根据填充datagridview的更改来更新另一个表

                                DATAGRIDVIEW                              
                  |  ID  | COL A | COL B | COL C | COL D |        


            SALEINFO                                       ITEMINFO
    |  ID  | COL A | COL B |                       |  ID  | COL C | COL D |      

在上图中,DataGridView是我需要显示的内容。如您所见,我需要加入两个表,但需要SaleInfo才能在数据库中更新。所有三个表的ID列都相同。

接近这个的最好方法是什么?

1 个答案:

答案 0 :(得分:0)

为了实现这一点,SALEINFO和ITEMINFO这两个表应该按原样保留,并在使用DataAdapter进行数据库更新时使用。 要准备DataView,您需要创建第三个实体,例如ViewSaleInfo将填充GridView所需的公共属性,并将它们绑定到相应的表和列。 ViewSaleInfo将包含两个来自SALEINFO的DataRows和一个来自ITEMINFO的DataRows。 因此,您需要使用ViewSaleInfo包装每个SALEINFO / ITEMINFO DataRow对。 就像下一个:

class ViewSaleInfo
{
    ViewSaleInfo(DataRow t1, DataRow t2)
    {
        this.t1 = t1;
        this.t2 = t2;
    }

    public String COL_A
    {
        get
        {
            return t1["COL A"];
        }
        set
        {
            t1["COL A"] = val;
        }
    }

    // and other properties required for view from both data tables
}

使用此方法完成视图的所有工作后,您将拥有两个实际状态的数据表。