c# - 如何在 DataGridView 中创建 LookUp 字段?

标签 c# datagridview lookupfield

在我的 DataGridView 中,我显示了一个表中的大量列。在此表中,我有一列指向另一个表中的项目。正如您可能已经猜到的那样,我想在网格中的一列中显示第二个表中的一些文本值,而不是 ItemID。 我在网上找不到如何执行此操作的正确示例。

假设我在数据库中有两个表:

表用户:

UserID UserName UserWorkplaceID
  1     Martin        1
  2     John          1
  3     Susannah      2
  4     Jack          3

工作台:

WorkplaceID WorkplaceName
     1        "Factory"
     2        "Grocery"
     3        "Airport"

我有一个无类型数据集 dsUsers,一个绑定(bind)源 bsUsers,和两个用于填充数据集的 DataAdapters (daUsers, daWorkplaces).

我正在执行的代码:

daUsers.Fill(dsUsers);
daWorkplaces.Fill(dsUsers);
bsUsers.DataSource = dsUsers.Tables[0];
dgvUsers.DataSource = bsUsers;

此时我在 dgvUsers 中看到三列,UserID、UserName 和 UserWorkplaceID。但是,我希望看到“Factory”、“Grocery”等而不是 UserWorkplaceID 和值 1、2、3...

所以我在 dgvUsers 中添加了另一个名为“WorkplaceName”的列,在我的代码中我试图将它绑定(bind)到新创建的关系:

dsUsers.Relations.Add("UsersWorkplaces", dsUsers.Tables[1].Columns["WorkplaceID"], dsUsers.Tables[0].Columns["UserWorkplaceID"]);

WorkplaceName.DataPropertyName = "UsersWorkplaces.WorkplaceName";

不幸的是,这不起作用。关系创建没有错误,但运行程序后此列中的字段为空。

我做错了什么?

我还想问一个在 DataGridView 中使用 LookUp 组合框的示例,它允许我更改 UserWorkplaceID,但它会显示一个位于 WorkplaceName 下的 tex 值,而不是数值。

感谢您的宝贵时间。

最佳答案

在我看来,最好的决定是使用 DataGridViewComboBoxColumn 列类型。如果这样做,您应该事先创建一个带有查找数据的数据适配器,然后设置 DataGridViewComboBoxColumn 的 DataSource、DataPropertyName、DisplayMember 和 ValueMember 属性。您还可以将 DisplayStyle 属性设置为 Nothing 以使该列看起来像普通数据列。就是这样。

关于c# - 如何在 DataGridView 中创建 LookUp 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330215/

相关文章:

c# - 通过LINQ从gridview获取列值

c# - 在 GridView 模板字段中设置文本框值

mysql - 如何在 Sequel Pro 中创建查找字段?

database - MS Access 07 - Q 重新查找列与多对多; Q re 多对多形式的复选框

c# - 创建新项目时,以编程方式生成的查找字段导致 "System.ArgumentException: Value does not fall within the expected range"

c# - 依赖注入(inject)和显式接口(interface)实现

c# - Foreach 找不到嵌套类

c# - 使用 Xamarin 构建可移植 SignalR 组件

c# - 如何在多线程应用程序中安全地填充数据和 Refresh() DataGridView?

C# DataGridview ColumnHeader 多行文本居中或右对齐