Datagridview 更新到多个表而不使用 bindingsource 或 tableadapter

Posted

技术标签:

【中文标题】Datagridview 更新到多个表而不使用 bindingsource 或 tableadapter【英文标题】:Datagridview update to multiple tables without using bindingsource or tableadapter 【发布时间】:2018-11-02 17:16:51 【问题描述】:

我有一个有效的 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】:

我确信它可以重写以允许更新

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

如果您要更新两个不同的表,请编写一个存储过程来进行更新,将数据传递给存储过程(同样,将其分配给数据适配器的更新命令)并更新存储过程中的多个表

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

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

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

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

如果您将一行的名称编辑为 Jane Smith,将另一行的名称编辑为 John Jones,那么哪一行胜出?

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

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

建议您先阅读“创建简单的数据应用程序”教程,无论其他教程看起来如何适用于您的情况;)

【讨论】:

感谢您的回答。希望有其他的,但我可以使用这些信息。再次感谢。

以上是关于Datagridview 更新到多个表而不使用 bindingsource 或 tableadapter的主要内容,如果未能解决你的问题,请参考以下文章

如何使用特定行更新 sqlite 表而不重复存在的行?

VBA - 复制粘贴单词表而不合并

vbscript VBA Excel交叉连接多个工作表而不重复

SQL Server - 合并大表而不锁定数据

向模型 (edmx) 添加新表而不更新 Database First Entity Framework MVC 应用程序中的其他模型

mysql怎么导出数据库表而不导出数据