DataGridViewComboboxCell 显示成员未显示
DataGridViewComboboxCell display member not showing up
目标
SteelTypes 的数据网格视图有一个列已绑定到数据视图 (SteelThicknesses)。我可以 select 数据并正确设置。但是我无法加载相同的信息。我的 datagridview comboboxcell 包含值和已编辑的格式化文本,但我无法设置显示成员信息。
当前问题
除组合框列外,我的所有文本框列都已正确加载。 cbCol 的变量设置正确,EditedFormattedValue 和 FormattedValue 包含我想要的值!但是,displayMember 不会复制到 datagridviewcombobox 单元格中。
我试图通过将其值设置为主键 (PK_SteelThickness) 来在 Épaisseur(厚度)列中显示“3”:
查看下面的结果。除了我的 comboboxcell 之外的所有内容都已填充:
提前感谢您的帮助,这让我抓狂:)
您没有设置文本。您设置基础 ID。这个想法是将列绑定到父级 table,并将网格绑定到子级 table,该子级具有指向该父级 table 的外键。您在网格单元格中设置外键值,并显示来自父级 table 的相应文本值。
举个例子,假设您有一个 Handedness
table 像这样:
Id Name
1 Right
2 Left
3 Ambidextrous
你有一个 Person
table 像这样:
Id Name HandednessId
1 Peter 2
2 Paul 1
3 Mary 3
在您的网格中,您将创建一个 DataGridViewComboBoxColumn
并将其 DataPropertyName
属性 设置为 "HandednessId"。然后,当您将 Person
table 绑定到网格时,HandednessId
列将绑定到组合框列。您可以将 Handedness
table 绑定到该列,并将 DisplayMember
和 ValueMember
分别设置为 "Name" 和 "Id"。然后网格将分别为 "Peter"、"Paul" 和 "Mary" 显示 "Left"、"Right" 和 "Ambidextrous"。如果你想让 Peter 灵巧,你可以将 HandednessId
单元格 Value
设置为 3 然后它会显示 "Ambidextrous".
有关详细信息,请参阅此内容:
看来你在这里为自己做了很多工作。 Datagridcombobox 可用于解码值,只需使其
- DataSource 设置为提供 key/value 查找的内容,例如 SteelThicknesses 数据table 具有两列 Disp 和 Val 并且具有
"Thick",1
"Medium", 2
"Thin", 3
,
- DisplayMember 设置为包含要显示的文本的查找 table 中的列名称的字符串,例如 "Disp"、
- ValueMember 设置为查找中具有与要显示的文本相关的值的字符串列名称,例如 "Val" 和
- DataPropertyName 设置为另一个 table 中具有要解码值的 属性(列)的名称(查找的 Val 列中的值之一 table)(例如带有 SteelThicknessID 列的产品 table)。
datagridview 绑定到产品数据table,组合将找到例如3 在 steelthicknessid 列中,它将在 steelthicknesses table 的 Val 列中查找 3 并显示它在 steelthickesses.if 的该行的 Disp 列中找到的文本 用户通过删除更改显示的值组合列表并选择 Thick,它将反向工作并从 Val 列中取 1 并使用 steelthicknessid 的新值 1 更新产品 table。如果您不想这样,请将列或数据网格视图设置为只读
有关更复杂的讨论,请参阅我在 DataGridView Loading From LINQ
中的回答
这是一个奇怪的行为,但我发现将我的加载方法调用从 new() 更改为 Load() 形式使其有效...
所以我改变了我的初始代码:
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
LoadSteelPlates()
LoadPlateQuotes()
End Sub
为此:
Private Sub frmQuotePads_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadSteelPlates()
LoadPlateQuotes()
End Sub
这是唯一经过修改的代码,现在可以使用了。
目标
SteelTypes 的数据网格视图有一个列已绑定到数据视图 (SteelThicknesses)。我可以 select 数据并正确设置。但是我无法加载相同的信息。我的 datagridview comboboxcell 包含值和已编辑的格式化文本,但我无法设置显示成员信息。
当前问题
除组合框列外,我的所有文本框列都已正确加载。 cbCol 的变量设置正确,EditedFormattedValue 和 FormattedValue 包含我想要的值!但是,displayMember 不会复制到 datagridviewcombobox 单元格中。
我试图通过将其值设置为主键 (PK_SteelThickness) 来在 Épaisseur(厚度)列中显示“3”:
查看下面的结果。除了我的 comboboxcell 之外的所有内容都已填充:
提前感谢您的帮助,这让我抓狂:)
您没有设置文本。您设置基础 ID。这个想法是将列绑定到父级 table,并将网格绑定到子级 table,该子级具有指向该父级 table 的外键。您在网格单元格中设置外键值,并显示来自父级 table 的相应文本值。
举个例子,假设您有一个 Handedness
table 像这样:
Id Name 1 Right 2 Left 3 Ambidextrous
你有一个 Person
table 像这样:
Id Name HandednessId 1 Peter 2 2 Paul 1 3 Mary 3
在您的网格中,您将创建一个 DataGridViewComboBoxColumn
并将其 DataPropertyName
属性 设置为 "HandednessId"。然后,当您将 Person
table 绑定到网格时,HandednessId
列将绑定到组合框列。您可以将 Handedness
table 绑定到该列,并将 DisplayMember
和 ValueMember
分别设置为 "Name" 和 "Id"。然后网格将分别为 "Peter"、"Paul" 和 "Mary" 显示 "Left"、"Right" 和 "Ambidextrous"。如果你想让 Peter 灵巧,你可以将 HandednessId
单元格 Value
设置为 3 然后它会显示 "Ambidextrous".
有关详细信息,请参阅此内容:
看来你在这里为自己做了很多工作。 Datagridcombobox 可用于解码值,只需使其
- DataSource 设置为提供 key/value 查找的内容,例如 SteelThicknesses 数据table 具有两列 Disp 和 Val 并且具有
"Thick",1
"Medium", 2
"Thin", 3
, - DisplayMember 设置为包含要显示的文本的查找 table 中的列名称的字符串,例如 "Disp"、
- ValueMember 设置为查找中具有与要显示的文本相关的值的字符串列名称,例如 "Val" 和
- DataPropertyName 设置为另一个 table 中具有要解码值的 属性(列)的名称(查找的 Val 列中的值之一 table)(例如带有 SteelThicknessID 列的产品 table)。
datagridview 绑定到产品数据table,组合将找到例如3 在 steelthicknessid 列中,它将在 steelthicknesses table 的 Val 列中查找 3 并显示它在 steelthickesses.if 的该行的 Disp 列中找到的文本 用户通过删除更改显示的值组合列表并选择 Thick,它将反向工作并从 Val 列中取 1 并使用 steelthicknessid 的新值 1 更新产品 table。如果您不想这样,请将列或数据网格视图设置为只读
有关更复杂的讨论,请参阅我在 DataGridView Loading From LINQ
中的回答这是一个奇怪的行为,但我发现将我的加载方法调用从 new() 更改为 Load() 形式使其有效...
所以我改变了我的初始代码:
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
LoadSteelPlates()
LoadPlateQuotes()
End Sub
为此:
Private Sub frmQuotePads_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadSteelPlates()
LoadPlateQuotes()
End Sub
这是唯一经过修改的代码,现在可以使用了。