我有一个数据绑定组合框(WinForms),当组合框失去焦点时,它会显示ValueMember,而不是DisplayMember。这是一个简单的例子,我遇到了这个问题:
Public Class Populator
Public Class Job
Property JobID As Integer
Property JobName As String
Public Sub New(ByVal id As Integer, ByVal name As String)
JobID = id
JobName = name
End Sub
End Class
Public Class Person
Property Name As String
Property JobID As Integer
Public Sub New(ByVal n As String, ByVal id As Integer)
Name = n
JobID = id
End Sub
End Class
Public Shared Function GetJobs() As List(Of Job)
Dim joblist As New List(Of Job)
joblist.Add(New Job(1, "Manager"))
joblist.Add(New Job(2, "Clerk"))
joblist.Add(New Job(3, "Unemployed"))
Return joblist
End Function
Public Shared Function GetPeople() As List(Of Person)
Dim personList As New List(Of Person)
personList.Add(New Person("Bill", 2))
personList.Add(New Person("Sally", 1))
personList.Add(New Person("Mark", 3))
personList.Add(New Person("Angie", 3))
personList.Add(New Person("Phil", 2))
Return personList
End Function
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Populator_PersonBindingSource.DataSource = Populator.GetPeople
Me.JobBindingSource.DataSource = Populator.GetJobs
End Sub
End Class
以下是一些截图:
请告诉我如何在组合框失去焦点时保持DisplayMember的显示。
答案 0 :(得分:0)
ComboBox DropDownStyle必须设置为DropDownList,而不是DropDown,以消除这种离焦行为。显然,当您从“数据源”选项卡中将字段拖动为ComboBox时,ComboBox DropDownStyle最初设置为DropDown。
我在上面列出的示例程序和我的真实程序中尝试了这个。它在两种情况下都有效。
答案 1 :(得分:-1)
所以不要使用visual aid使用sql代码,填入cs代码
//when you set data source it loses focus to window title
cmb.datasource = datatable;
cmb.valueMember = "col1";
cmb.dispMember = "col2";
// this does the trick. gives focus back into combobox's list
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
cmb.DropDownStyle = ComboBoxStyle.DropDown;