Datagridview更新为多个表,而无需使用bindingsource或tableadapter

时间:2018-11-02 17:16:51

标签: sql vb.net sql-server-2008 datagridview

我有一个有效的Select查询,但是由于它包含多个表,所以无法从datagridview更新它。
我敢肯定它可以重写以允许更新,但是我的SQL相当有限。

SELECT 
d.Unique_Part_ID, 
d.Location_ID, 
d.Recorded_Value, 
d.Date_Time_Stamp, 
d.Traceability, 
d.Part_Status, 
d.Measure_State,
p.Part_Number,  
p.Part_Rev,
c.CN, 
c.Characteristic_Requirement, 
c.Characteristic_Name, 
c.Tol_min, 
c.Nominal_Value, 
c.Tol_Max, 
c.Proprietary_Tag 
FROM GE_KC_Data AS d 
INNER JOIN GE_Key_Characteristics AS c ON d.Characteristic_ID = c.ID 
INNER JOIN GE_Parts AS p ON c.PartID = p.ID 
WHERE IsNull(d.Reported,'False')='False' 
ORDER BY d.Date_Time_Stamp DESC

你们中的任何一个天才都能提供帮助吗? 使用子查询语句还会返回错误“当EXISTS未引入子查询时,只能在选择列表中指定一个表达式” 当然,我不知道那是什么意思。

1 个答案:

答案 0 :(得分:0)

  

我确定可以将其重写以允许更新

不能。确定要更新的表并为其编写更新语句,然后将其分配给所使用的数据适配器的updatecommand属性

如果您将更新两个不同的表,请编写存储过程以进行更新,将数据传递给sproc(再次将其分配给dataadapter的updatecommand)并更新sproc内的多个表

或循环绑定datagridview的数据表,并使用多个更新查询自己手动提交更新的行

对于在这样的情况下(如果我有一个主/从数据关系来表示一个表格)的价值,我不尝试在一个网格中表示它们,而是使用两个网格,对每个表进行简单选择有一个具有可更新表的数据集,我在两个表之间建立一个数据关系,然后使从属网格的绑定源具有一个数据源(主绑定源)和一个数据属性名称(该数据集的数据关系名称)。这意味着当在主网格中选择一个主行时,从网格将仅过滤到与所选主网格相关的行

因此,您最终不会在单个网格中重复使用主单元格(如果您有订单和订单项,那么将对每个订单项重复订单数据:

  ordernum | customer name | item ordered
  123      | John Smith    | washer pump
  123      | John Smith    | door seal

如果您将一行的名称编辑为简·史密斯,将另一行的名称编辑为约翰·琼斯,哪一行会获胜?

拥有两个网格和链接的数据是执行此操作的正确方法。有关更多信息,请参见:

https://msdn.microsoft.com/en-us/library/fxsa23t6.aspx

无论您如何看待其他情况,建议您先阅读“创建一个简单数据应用程序”教程;