我在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
第一次正常工作。
在循环的第二次迭代中,它转到下一个选定项,但返回第一个选定值的索引。如何返回所选其他索引的值?
答案 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
这解决了我的问题。