【问题标题】:DataGridView BindingDataSource with a Foreign Key带有外键的 DataGridView BindingDataSource
【发布时间】:2012-01-18 17:56:26
【问题描述】:

我有一个DataGridView,它绑定到一个自定义业务对象的BindingList<T>,具有 DeckID、Name、UserID、Size 和 Notes 字段。

这是通过 IDataReader 对象从 MSSQL 数据库中调用的。现在,我的问题是 UserID 是一个整数,在我的数据库中,它是一个名为 SystemUser 的表的外键,带有一个 Username 字段。
我想要做的是从我的数据库中的 SystemUser 表中获取用户名,并根据任何 UserID 显示该名称。这在WebForms 中使用GridView 非常容易,但在WindowsForms 应用程序上却不是那么容易。

【问题讨论】:

  • 你应该添加一个平台标签(silverlight、asp.net、winforms等)
  • 您可以编写自定义查询来加入这些表。
  • 是的,但是我必须创建一个新类来保存来自 SQL 的特定查询,以及该类的数据提供者和控制器。我知道在 Web 窗体中可以做到这一点,所以我几乎可以肯定它应该在 Windows 窗体中是可行的。在我看来,这应该是相当普遍的事情......

标签: c# winforms datagridview enterprise-library system.data


【解决方案1】:

我想我明白你在寻找什么。使用 onSelectionChange 之类的事件从 DataGridView 实例中获取所选项目。下次使用:

var selectedItem = datagridviewinstance.SelectedRows[x].DataBoundItem as YourTypeHere
var data = (from a in SOMETHING where fk == selectedItem.ForeignKeyProperty select a);
textbox1.Text = data.text;

现在您可以进行下一次数据库调用来检索外键对象并更新您希望的任何 GUI 对象。祝你好运!

【讨论】:

  • 对不起,我只用 C# 做过东西...我根本不懂 VB.NET,我不明白第二行说什么...但我知道怎么做从 GridView 获取数据绑定对象。我只是不明白如何让 DataGridView 自动选择外部表的数据。
  • 如果您不想更改 DTO 以最初检索数据,则必须进行第二次数据库调用。在“选择更改”上放置一个事件。在那里使用您的外键设置您的数据库调用。当您更改选择时,数据网格将“自动选择”外键数据。
  • 对不起大家,在 MSDN 上发了一些帖子后,他们将我链接回 StackOverflow 上的一篇文章,解决方案在这里:stackoverflow.com/questions/3758757/…
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多