使用DataGridView的ID列作为另一个DataGridView的查询源

时间:2009-08-31 06:09:53

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

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

实现这一目标的好方法是什么?


我的可能解决方案

绑定到匿名类型

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

绑定到特定类型

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

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

1 个答案:

答案 0 :(得分:1)

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

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

使用静态GridView比动态创建和格式化它们要简单明了得多。

编辑:所以如果你有n:m:l结构并希望显示特定n的所有l,你需要运行一个subselect,如 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. 阅读 RowSelecting事件。这将允许 你要抓住n值 选择了行。
  3. 运行类似的查询 到上面并绑定你的第二个 GridView到了结果 的数据源。
  4. 希望这有帮助。