【问题标题】:Pulling a sub-set of an SQL Server Dataset using comboboxes使用组合框拉取 SQL Server 数据集的子集
【发布时间】:2018-01-18 14:16:10
【问题描述】:

我正在尝试使用 VB .NET 将更复杂的 Access 数据库/用户界面“转换”为自定义应用程序。我也是 .NET 中的新手,所以请保持温和。

以下是我尝试在 .NET 中复制结果的步骤 1) 为我的 SQL Server 创建一个数据源 (dsServer),以提取所有表和所有数据。我已经使用 UI 在我的项目中创建了这个数据源。

2) 在我的数据源中创建一个数据表 (dtResults),从 3 个表中提取我需要的所有信息:
[Person] - 这是一个单独的条目列表。
[Primary Teacher] - 这通过 [Person] 表上的列 (Primary) 链接。这将返回单个结果。 [测试] - [Person].ID 喜欢这个。此表每个 [Person] 有多个条目 我还在我的项目中使用 UI 的数据源下创建了这个数据表。

3) 在表单上填充 12 个组合框,用于将我的结果“过滤”到 DataGridView 上。每个组合框都需要是 dtResults 中内容的 DISTINCT 列表。每次组合框更改时,DataGridView 中的结果以及所有其他组合框都需要更新。 (将选择范围缩小到可用的范围)

4) 在将显示过滤结果的同一表单上创建一个 DataGridView。

我似乎在创建数据源或数据表方面没有任何问题。我不知道如何从数据表中填充组合框或如何将过滤后的结果带回 datagridview。

任何有关实现此目的的最佳方法的帮助都会很棒。

【问题讨论】:

  • "。我能够从 SQL Server 中提取数据集没问题。我不知道如何正确地将结果过滤到一个子集中"。原始查询中的 SQL WHERE 子句怎么样?或者您可以以相同的方式在 DataTable 对象上设置过滤器
  • 同意,但是我不知道如何正确构建一个包含 12 个变量的 WHERE 子句。我也不知道是从服务器中提取所有数据然后应用过滤器或将变量传递给服务器是否更好。在我看来,将所有数据拉入内存然后使用它会更好。
  • 您好,欢迎来到 SO。这很可能会被关闭,因为这里没有足够的信息。你只是模糊地解释了这个问题。我会敦促您阅读您发布的内容并问自己是否可以理解这个问题,更不用说提供任何类型的解决方案了。
  • 我不是在找人来“解决”我的问题。我正在寻找的是在哪里找到解决方案的指导。我不想或不需要你为我编写代码,我想学习并能够自己编写代码。但是,如果您能告诉我需要哪些细节,我会尝试编辑我的帖子以添加更多细节。
  • “如何正确构建一个包含 12 个变量的 WHERE 子句。”我猜想,通过将它们与许多 AND 和 OR 结合在一起。在不知道查询的确切性质的情况下,很难知道还能说什么。 where 子句可以包含任意多个部分。您不是在 Access 数据库中编写了一些等效的 SQL 吗?如果您使用查询生成器,您可以看到它生成的 SQL 并从那里开始工作。如果我们能够看到给您带来麻烦的代码的相关部分以及您目前所获得的内容,那将很有帮助,然后我们可以缩小问题的范围。

标签: sql-server vb.net ado.net


【解决方案1】:

听起来您希望通过 8 个不同组合框的可选选择来过滤单个结果网格视图。

当您为 gridview 生成查询时,您需要有选择地为每个组合框包含一个带有值的 where 子句。对于每个组合框,这应该像 sql += " AND Combobox2Column = @Combobox2Value " 一样简单。不要为没有选择的组合框使用类似“%”模式的列。如果您在发送到数据库之前在 VB 中构建查询,这可能会对性能产生负面影响,并且没有必要这样做。 (这是在 where 子句中使用“WHERE 1=1”作为第一个谓词时派上用场的场景。它确实有一点开销,但它将所有其余谓词标准化为始终以 AND 开头以防止确定特定组合框是否是唯一具有选定值的组合框的额外开销。如果您的查询需要任何其他不基于组合框的过滤器,则无需这样做)

另一个重要因素是更改任何组合框都会触发刷新网格视图内容的事件。将您的组合框刷新逻辑放在与事件处理程序分开的专用方法中。然后,您可以轻松地从每个组合框(或任何其他控件/事件)的事件处理程序中调用该方法。

希望对您有所帮助。

【讨论】:

  • 我认为这让我更接近了一点。我从没想过要使用 LISTBOX,因为我被困在 DataGridView 上,因为这是所有其他示例所使用的。我也非常喜欢您对 WHERE 1=1 然后添加所有 AND 语句的想法。这将使代码看起来更干净。我会朝这个方向走,看看我是否能解决我的问题。如果没有,我会回来尝试发布一个更好的问题。
  • @Cory 抱歉,我使用的是白话访问控制列表框。我会使用 asp:GridView 来显示数据。我更新了我的答案,称它们为网格视图而不是列表框。
  • 好的...我仍然愿意尝试。如何使结果成为指向现有数据集的查询?
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 2013-10-12
  • 2021-12-07
  • 1970-01-01
  • 2021-07-23
  • 2019-06-11
  • 2016-12-19
  • 2012-03-13
相关资源
最近更新 更多