【发布时间】:2015-04-16 14:40:48
【问题描述】:
我正在开发一个在 vb.net 中开发的桌面应用程序。我正在尝试根据从数据库中获得的值选择选中列表框中的项目。下面是填充选中列表框的代码
Private Sub LoadDisapprovalList()
cblFedralReasons.Items.Clear()
cblStateReasons.Items.Clear()
cblFedralReasons.DataSource = Main.DataClient.DisapprovalReasonList_Get(FedralReason)
cblFedralReasons.DisplayMember = "DisapprovalReasonTypeDesc"
cblFedralReasons.ValueMember = "DisapprovalReasonTypeGenId"
cblStateReasons.DataSource = Main.DataClient.DisapprovalReasonList_Get(StateReason)
cblStateReasons.DisplayMember = "DisapprovalReasonTypeDesc"
cblStateReasons.ValueMember = "DisapprovalReasonTypeGenId"
End Sub
之后,我尝试根据数据库中的值选择项目。这是代码
Private Sub LoadApplicationDisapprovalReasons()
Dim lstApplicationDisapprovalReasons As New List(Of DataService.usp_ApplicationDisapprovalReason_Get_Result)
lstApplicationDisapprovalReasons = Main.DataClient.ApplicationDisapprovalReason_Get(_SeqID)
If lstApplicationDisapprovalReasons.Count > 0 Then
For Each item In lstApplicationDisapprovalReasons
Dim selectedDisapprovalId As Integer = item.DisapprovalReasonTypeGenId
Select Case item.DisapprovalReasonType
Case FedralReason
Dim selectedIndex = cblFedralReasons.Items.IndexOf(selectedDisapprovalId)
cblFedralReasons.SetItemCheckState(selectedIndex, CheckState.Checked)
Case StateReason
Dim selectedIndex = cblStateReasons.Items.IndexOf(selectedDisapprovalId)
cblStateReasons.SetItemCheckState(selectedIndex, CheckState.Checked)
End Select
Next
End If
End Sub
但问题是 cblFedralReasons.Items.IndexOf 总是返回 -1。数据库中的所有数据都正确显示,但 checklistbox 发生了一些奇怪的事情,我无法理解。
编辑: 此外,当我尝试使用以下代码获取项目的文本时,它会返回我的集合名称而不是文本。
cblFedralReasons.items(1).tostring
返回
DisapprovalReasonList
而不是那个项目的文本!
【问题讨论】:
-
听起来 CLB 正在使用与列表中不同的一组对象。
DisapprovalReasonList_Get返回什么(确切的类型)? ToString 将返回类型名称,除非该类覆盖它。 -
即List(Of DataService.usp_DisapprovalReasonList_Get)类型的列表
标签: vb.net winforms checkedlistbox