2010-02-10 163 views
1

我有一个数据库(使用Sqlite)的ID有一个主键与autoinc,加载到列表框控件的值。如果我正常地循环访问数据库,将数据库的值添加到我的列表框中,我不能通过使用SelectedIndex来获取ID,因为索引不总是与ID相同,并且ID不一定总是索引。 :(这让我很痛苦,当我想查询删除行,基于SelectedIndex。使用唯一ID循环?

我想通过ID删除行,但我没有办法获得该ID与我使用的循环(或做我?帮我把创意!),是否有我可以使用一些隐藏字段类型属性?

谢谢!

+0

问题是没有意义的。 SelectedIndex是列表框的索引而不是包含的主键值。 – 2010-02-10 01:40:35

+0

请务必指定winforms或web :) – 2010-02-10 01:40:57

回答

0

如果要循环在一个列表框,你应该做这样的

Dim myBox As New ListBox 
    For Each item In myBox.Items 
     'do stuff with item 
    Next 

确保在项目级别或课程级别有选项推断开

0

你永远不能依靠SelectIndex奇偶校验与你的数据库;您应该使用SelectedValue并使用您的数据库ID作为ListItem值。

1

这取决于您将什么项目添加到列表框中。如果您只是添加纯字符串,则无法返回到ID。你需要的是一个包含你想显示的ID和值的类。您可以通过覆盖ToString方法来显示该值。我VB是有点生疏,但这里有一个伪例如:

Class Item 
    Property ID as Integer 
    Property Name as String 

    Sub New(ID as Integer, Name as String) 
     Me.ID = ID 
     Me.Name = Name 
    End Sub 

    Overrides Function ToString() as String 
     Return Name 
    End Function 
End Class 

使用类:

Box.Items.Add(new Item(ID, Name)) 
For Each Item as Item in Box.Items 
    Delete(Item.ID) 
End For 
+0

我将如何获取,本身,项目ID和显示它?我很迷茫,因为我不是一个完全vb的智者,而是一个业余爱好者。我摆弄着你所提供的东西!不胜感激! – 2010-02-10 02:02:41

+0

这取决于你如何从数据库中获得它。例如,如果您使用DataTable进行查询,则可以获取多个字段并将其读出:新项目(CInt(行[“ID”]),CString(行[“Name”])) – 2010-02-10 02:18:23

+0

我正在使用Sqlite的SqlReader从数据库中获取它并将这些项插入到Listbox中。我正在寻找选定项目的ID和名称,但遇到问题。如果我只是告诉你我想要的是什么,这可能是最有意义的! txt_id.text = box.selecteditem(id) txt_name.text = box.selecteditem(name) – 2010-02-10 02:21:33