我在VB.net 2010中有关于组合框的问题。
在我的数据库中,我有4个字段:例如:
idDetails | DetailsShortCode | Details_Explain | DetailsSortOrder
{autonum}1| DOA | Death on Arrival| 5
{autonum}2| NDI | No Display | 10
{autonum}3| QQA | In Research | 4
等。
这些值从dbase(mySQL)中拉出并插入CheckedListBox
。
我将值显示为DetailsShortCode& “ - ”& Details_explain。
我使用[for循环]来创建索引号,因为排序顺序基于Details Sort顺序。这意味着VB.net按以下顺序获取结果:
idDetails | DetailsShortCode | Details_Explain | DetailsSortOrder
3 | QQA | " ... " | 4
1 | DOA | "...." | 5
2 | NDI | " ... " | 10
如果我把它放在列表框中,我将收到的错误是“3是'索引'的错误值”
由于VB.net期望CheckedListBox
(以及ComboBox
)索引始终按顺序排列,如0,1,2,3,4..etc .. < / p>
问题在于数据库中的订单可以更改,项目可以更改,并且我在另一个表中有一个字段,其中包含所选详细信息的逗号分隔列表(例如1; 10; 14; 12;) 这意味着1总是必须是具有PrimaryKey 1的项目,并且该索引上显示的项目必须始终相同...
所以我需要的是知道如何使用主键作为索引号,并且当索引是随机顺序时让VB.Net不会抛出错误..,或者给项目隐藏值(比如在HTML和PHP中),我可以使用[for loop]索引..
这是我用于将项目插入Details CheckedListBox
的代码Function LoadComboBoxes(ByVal CB As String)
Dim SQLtext = ""
Select Case CB
Case "Details"
SQLtext = "Select " & _
"idDetails, " & _
"DetailsCode, " & _
"DetailsExplain, " & _
"DetailsSortOrder " & _
"FROM Details order by DetailsSortOrder"
Dim i = -1
Dim dr As MySqlDataReader
Dim cmd As New MySqlCommand(SQLtext, dbconn)
connect()
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
CLBDetails.Items.Clear()
While dr.Read
i += 1
CLBDetails.Items.Insert(i, .GetString(1) & " - " & dr.GetString(2))
End While
end select
end function
答案 0 :(得分:0)
最简单的方法可能是使用DataGridView,它应该具有CheckedComboBox的所有功能,并且能够将数据保持为列数据,并允许您将ID列引用为ID列而不是别名为ID的ID索引。
取决于CheckedComboBox
是什么(周围有很多这些)及其继承的内容,您应该能够在那里存储对象:
Class DisplayItem
Friend ID as Long
DetailsShortCode As String
Details_Explain As String
DetailsSortOrder As String
Public Function overrides ToString As String
' depending on the CheckedComboBox add column seperators?
return DetailsShortCode & Details_Explain & DetailsSortOrder
End Function
End Class
将诸如此类的对象添加到控件中可以保留PK ref:
ccb.Items(N).ID
ToString函数允许您根据需要格式化输出。此外,您可以创建List(Of DisplayItem)或BindingList(Of DisplayItem)并通过将数据源绑定到List来驱动CheckedComboBox。 DGV仍然更容易......