如何返回在列表框中选择的多个项目的唯一索引值

时间:2014-07-28 19:13:52

标签: asp.net vb.net web webforms listbox

我在VB.NET中有一个列表框,允许用户选择多个类别。我需要将这些类别放入数据库中,并且当数据库处理ID时需要来自类别列表框的索引值。 SelectedItems(带有s)在网络应用程序中不起作用。

我尝试过以下代码:

For Each category As ListItem In CategoryListBox.Items
    If category.Selected Then
        Dim courseCategory As New CourseCategory
        courseCategory.CourseID = course.ID
        courseCategory.CategoryID = CategoryListBox.SelectedIndex
        Using courseCategoryEntities As New Eng_NWDTrainingWebsiteEntities
            courseCategoryEntities.CourseCategories.Add(courseCategory)
            courseCategoryEntities.SaveChanges()
        End Using
    End If
Next

当遍历循环时,代码是:

courseCategory.CategoryID = CategoryListBox.SelectedIndex

第一次正常工作。

在循环的第二次迭代中,它转到下一个选定项,但返回第一个选定值的索引。如何返回所选其他索引的值?

2 个答案:

答案 0 :(得分:1)

这取决于您需要传递给数据库的ID。如果它确实是ListBox中ListItem的索引,那么您将使用:

courseCategory.CategoryID = CategoryListBox.Items.IndexOf(category); 

然而,这可能不是最好的方法。也许ListItems的顺序发生了变化,弄乱了你的索引。您可能希望在每个ListItem上存储实际的CategoryID。 Value属性适用于此。您可以将所需的列设置为DataValueField,如下所示:

<asp:ListBox ID="CategoryListBox" runat="server"
    DataValueField="CategoryID "></asp:ListBox>

因此,当您循环遍历ListBox中的每个ListItem并检查它是否被选中时,只需使用它的Value属性。

For Each category As ListItem In CategoryListBox.Items
    If category.Selected Then
        Dim courseCategory As New CourseCategory
        courseCategory.CourseID = course.ID
        courseCategory.CategoryID = category.Value;
        Using courseCategoryEntities As New Eng_NWDTrainingWebsiteEntities
            courseCategoryEntities.CourseCategories.Add(courseCategory)
            courseCategoryEntities.SaveChanges()
        End Using
    End If
Next

答案 1 :(得分:0)

通过在成功保存后取消选择列表框中的项目来修复代码。

   End Using
category.Selected = False
End If

这解决了我的问题。