【问题标题】:Use ID column of DataGridView as source of query of another DataGridView使用 DataGridView 的 ID 列作为另一个 DataGridView 的查询源
【发布时间】:2010-11-24 06:29:41
【问题描述】:

我使用 LINQ 查询我的 MSSQL 2005 数据库。我想在一个 DataGridView 中显示一些表的几个字段。选择 DataGridView 的一行应导致在另一个 DataGridView 中显示结果,该结果基于未在任何 DataGridView 中显示的列(它是一个 ID 属性)。

有什么好的方法可以做到这一点?


我对可能解决方案的想法

绑定到匿名类型

我会将我的 DataGridView 绑定到 BindingSource,该绑定源绑定到匿名 LINQ 查询(匿名类型)的结果。为了获得 ID 以建立与第二个 DataGridView 的关系,我会使用反射。

绑定到特定类型

我将创建一个类,其中包含我想在 DataGridView 中显示的所有字段以及 ID 字段。 BindindSource 将绑定到这个特定类的实例。

我想避免使用这种方法,因为我必须为我在应用程序中使用的每个 DataGridView 创建一个类,并且我必须维护三个部分,即类、LINQ 查询和 DataGridView 列。

【问题讨论】:

    标签: linq data-binding datagridview c#-3.0


    【解决方案1】:

    简单的解决方案是确保 ID 属性是第一个 Gridview 上的 DataKey。将 RowSelecting 事件添加到第一个 Gridview,使用该 Row 的 ID 属性作为第二个 Gridview 和 DataBind 的参数。

    如果您尝试根据所选行显示不同的数据(即数据可能来自几个不同的数据库表),那么我建议您为每个表创建一个 GridView,并在您的 RowSelecting 事件中确定要绑定和显示的 GridView。

    静态 GridView 比动态创建和格式化它们更简单、更清晰。

    编辑:因此,如果您有 n:m:l 结构并希望显示特定 n 的所有 l,则需要运行子选择,例如 SELECT * FROM l WHERE l.m_id IN (SELECT m_id FROM m WHERE m.n_id = n_value)

    总之:

    1. 阅读 DataKey 属性。这 将帮助您存储 n 值( n 表的 id)。
    2. 继续阅读 行选择事件。这将允许 你要抓住 n 值 选定的行。
    3. 运行类似的查询 到上面并绑定你的第二个 GridView 到结果 数据源。

    希望这会有所帮助。

    【讨论】:

    • “确保 ID 属性是第一个 Gridview 上的 DataKey”是什么意思?
    • 我不希望每个关系都有一个额外的 DataGridView。我有一个 n:m:l 关系,如果指定了 n,我想显示 所有 可能的 l。
    • DataKey 是一种为网格存储附加值而不显示它们的方法。把它想象成一个隐藏的领域。或者,您可以使用隐藏字段!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2011-09-14
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多