VB.NET - > Combobox随机索引

时间:2013-11-20 19:03:19

标签: mysql vb.net combobox

我在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。 我将值显示为DetailsS​​hortCode& “ - ”& 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

1 个答案:

答案 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仍然更容易......