c# - 如何根据两个表过滤 TableAdapter 的 FillBy?

标签 c# filter strongly-typed-dataset tableadapter

我在 Windows 窗体应用程序上使用 VS2008 C# Express 和 Northwind 数据库。

我使用拖放操作为两个 datagridview 设置主详细信息绑定(bind)(我使用了订单和订单详细信息)。至此,一切都按预期进行。为了不返回表中的每一行,我想根据订单表的过滤器以及订单详细信息表中的字段来过滤订单表。在 TableAdapter 配置向导中,我使用查询生成器添加了一个新的 FillByMyFilter,它创建了以下查询:

选择订单.[订单 ID]、订单.[客户 ID]、订单.[员工 ID]、订单.[发货名称]、订单.[发货地址]、订单.[发货城市]、订单.[发货地区], 订单.[发货邮政编码]、订单.[发货国家/地区]、订单.[发货方式]、订单.[订单日期]、订单.[必填日期]、订单.[发货日期]、 订单.运费 FROM 订单 INNER JOIN [订单详细信息] ON 订单。[订单 ID] = [订单详细信息].[订单 ID] WHERE (订单.[船舶名称] LIKE N'A%') AND ([订单详细信息].数量 < 20)

我通过添加两个表来获得此结果,但没有检查“订单详细信息”表中的任何字段框,因此它只会返回原始“填充”查询中使用的列。此时我只是尝试过滤主表中的数据集,而不返回不同数量的列。订单详细信息的子行仍应像默认的未过滤结果集一样工作。

现在的问题是:当我单击“执行查询”按钮时,它工作正常。我从上面的查询中获得了 53 行,而不是使用设计者创建的默认填充的 1078 行。它返回与原始填充查询相同的列。但是,当我尝试运行该应用程序时,出现以下约束错误:

“无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。”

我做错了什么?

更新:我认为由于向导创建的 INNER JOIN 而出现约束错误。如果我编辑查询以使用 LEFT JOIN,则向导会将其更改回 INNER JOIN。

我的问题仍然是如何根据父表和子表中的条件过滤父表(订单)中的记录。我的下一个测试是尝试使用存储过程,但想知道仅使用 TableAdapter 自定义 FillBy 方法。

问候,

调试

最佳答案

本文包含一些故障排除建议,可查明导致问题的确切行:

DataSet hell - "Failed to enable constraints. One or more rows contain values...."

关于c# - 如何根据两个表过滤 TableAdapter 的 FillBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410148/

相关文章:

c# - 为 Dapper 重置缓存

c# - 如何在 Visual Studio 中查找 MVC Controller 方法的引用

javascript - 使用函数方法从一系列数组中提取数据

objective-c - TableView :cellForRowAtIndexPath: not called because array is empty?

c# - 如何在 C# 中使用 ScriptEngine

c# - 避免歧义匹配异常

python - 从 Python 中的字符串中去除除数字和小数点以外的所有内容的最佳方法

python - 在Python中过滤具有特定要求的数据框

c# - .NET 4 中不使用 TypedTableBase 的类型化数据集

.net - 如何禁止将 DebuggerNonUserCodeAttribute 放置在数据集设计器生成的代码上?