- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望在 ComboBox
上有一个 DisplayMember
和一个 ValueMember
,它们只有 4 个值,并且它们始终相同。
是否可以不使用DataTable
作为DataSource
并且不创建类?
我想要这样的东西:
ValueMember= "Fixed"
DisplayMember= "Specific and unique number"
ValueMember= "Multiple"
DisplayMember= "Multiple and different numbers"
ValueMember= "Repeated"
DisplayMember= "One number repeated x times"
最佳答案
从根本上来说,你不能做你想做的事:
ValueMember= "Fixed"
DisplayMember= "Specific and unique number"
Value-
和 DisplayMember
不用于指定文字值,而是用于指示属性名称 在其他事情上(比如类)。
不使用DataSource
(标题)与不使用类(问题文本)不同。创建类还有其他选择:
您可以使用现有的 NET KeyValuePair
类将值与名称链接起来:
cbox.Items.Add(New KeyValuePair(Of String, String)("Specific",
"Specific and unique number"))
cbox.Items.Add(New KeyValuePair(Of String, String)("Multiple",
"Multiple and different numbers"))
cbox.Items.Add(New KeyValuePair(Of String, String)("Repeated",
"One number repeated x times"))
cbox.ValueMember = "Key"
cbox.DisplayMember = "Value"
没有数据源 - 数据位于项目集合中。还有 Tuple
正如另一个答案中所解释的
使用一个字符串作为另一个字符串的键是很奇怪的。通常,在代码中,您会想要一些不太容易因拼写错误而出错的东西。在某处输入“Fized”会破坏您的代码。 Enum
更有意义:
Private Enum ValueStyle
Specific = 0
Multiple = 1
Repeated = 2
End Enum
现在,您可以创建一个 List
,它链接用户的描述和 Enum
常量:
' fuller text descr of the enum for the user
Dim descr As String() = {"Specific and unique number",
"Multiple and different numbers",
"One number repeated x times"}
' get enum values into an array of ValueStyle
Dim values = [Enum].GetValues(GetType(ValueStyle)).Cast(Of ValueStyle).ToArray
' create a List of anon objects from the descr() and values()
Dim lst = values.Select( Function (q) New With
{.Value = q, .Name = descr (q)}
).ToList()
cboPicker.ValueMember = "Value"
cboPicker.DisplayMember = "Name"
cboPicker.DataSource = lst
这将创建一个匿名类型 - 一个没有类的对象 - 其名称和值属性映射到枚举和描述数组。如果 Enum
值不是连续的(例如 {8, 65, 99}),则必须以不同的方式构建列表。
这会创建一个匿名类型对象的临时集合,并将其指定为数据源。您将无法在其他方法中访问 Name
和 Value
属性,因为匿名类型无法传递给其他方法。但用户将看到所需的文本,并且 NET/VB 将提供该枚举值作为 SelectedValue
。使用 SelectedValue
更改事件:
' name user sees == cboPicker.Text
' value == cboPicker.SelectedValue boxed as Object
Dim userChoice As ValueStyle = CType(cboPicker.SelectedValue, ValueStyle)
If userChoice = ValueStyle.Specific Then
'...
ElseIf userChoice = ValueStyle.Repeated Then
'...
End If
请注意,代码不是将“Fixed”作为字符串进行测试,而是使用枚举,但仍然是可读的。
MSDN:Anonymous Types (Visual Basic)
<小时/>这些符合不需要新类(class)的标准,但请考虑:
Friend Class NameValuePair
Public Property Name As String
Public Property Value As Int32
Public Sub New(n As String, v As Int32)
Name = n
Value = v
End Sub
Public Overrides Function ToString() As String
Return Name
End Function
End Class
该类非常简单,并且在将任何 Name
与任何 Value
关联时几乎可以无限地重用。它可以在任意数量的项目中与任意数量的基于列表的控件一起使用。创建和使用它们列表的代码比使用其他方法更简单。
关于.net - 在没有数据源的情况下在 ComboBox 上设置 DisplayMember 和 ValueMember,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206678/
我阅读了很多关于 Winforms ComboBox ValueMember 属性主题的有用帖子,但没有一篇能回答我的具体问题。首先,我将描述一个工作正常的简单示例,然后我将描述我想如何改变它,并询问
我的 ComboBox 控件显示 publishername 和 authorlastname 并存储 publisherid 和 authorid。 当我运行我的代码时,它会显示 publisher
我有一个使用 Windows 窗体绑定(bind)到复选框列表的 linq 查询 var webresourcesFromCRM = from w in orgSvcContext.CreateQue
我有一个 combobox ,我想在这里显示一个字符串作为 DisplayMember并且有一个Dictionary作为ValueMember .我有一个包含带有字符串和字典的对象的列表,这个列表我用
我的选中列表框有问题。 public void GetFolder() { var dict = new Dictionary(); foreach (Fo
如何设置这些值?我有一个数据表,其中包含我想在组合框中设置的所有数据,但我找不到如何设置它。 我试过了 ComboBox1.DataSource = dataTable; ComboBox1.Valu
当我设置 DataSource在控件上并想使用 .ToString()作为DisplayMember , 我需要设置 DisplayMember最后一个或 ValueMember将覆盖它。 MSDN
我正在尝试使用 C# 从 ListBox 中获取所有选定的项目 ValueMember。 例如: 我有一个这样的列表: ID | Name and Lastname -----------------
我有一个小问题。 DataGridViewComboBoxColumn显示来自 ValueMember 的值而不是来自 DisplayMember .网格工作正常,当我从该列中选择某些内容时,我看到
我有一个具有以下结构的组合框。此外,我从另一个来源获取了一个 fld_id,我需要根据该 ID 在 ComboBox 中选择相应的项目。我该怎么做? comboBoxCustomers.DataSou
我有两个具有相同 DisplayMember 和不同 ValueMember 的项目,我想以编程方式选择这两个项目之一,我该怎么做? 项目: 123 -> Peter Pan 234 -> John
我有一个组合框,显示我国不同的市(这些市属于特定省)。由于存在具有相同名称的市政当局,我将“MunicipalityName”(我数据库中“MUNICIPALITY”表中的表列)绑定(bind)到组合
我希望在 ComboBox 上有一个 DisplayMember 和一个 ValueMember,它们只有 4 个值,并且它们始终相同。 是否可以不使用DataTable作为DataSource并且不
我有一个带有 Id、Name 列的组合框。我已将这些值添加到带有数据表的组合框中: DataTable.Rows.Add(1, "Name1"); DataTable.
我正在向 WinForms 应用程序添加一个组合框,我遇到了 DisplayMember 和 ValueMember 属性。它们的功能正是我的应用程序所需要的,但我不确定我是否喜欢它们的工作方式。 c
这是在 Windows 窗体、.NET 4.0 上。 public class Person { public int Id { get; set; } public string N
我有一个可编辑的 ComboBox,它对 Text 属性进行了验证,以确保手动输入的信息有效。 编辑:我想要做的就是使用选择的 ValueMember 而不是 DisplayMember 填充 .Te
我在尝试获取我设置的 ValueMember 值时遇到了一些问题。我正在尝试使用组合框来选择 Windows 窗体报告。我可以得到名称,但不能得到 RptValue。这是我的代码: p
我正在尝试创建包含键值对的列表框。我从类中获得的那些数据是从 getter 提供的。 类: public class myClass { private int key; privat
我正在尝试创建包含键值对的列表框。我从类中获得的那些数据是从 getter 提供的。 类: public class myClass { private int key; privat
我是一名优秀的程序员,十分优秀!