好的,这是我的问题。
我的数据库中有两个表(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列都相同。
接近这个的最好方法是什么?
答案 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
}
使用此方法完成视图的所有工作后,您将拥有两个实际状态的数据表。