#c# #asp.net #vb.net #listview #datalist
#c# #asp.net #vb.net #listview #список данных
Вопрос:
Я в порядке с C # и VB.nET
У меня есть список данных (вопрос) внутри ListView (раздел). ListiView предназначен для хранения разделов. Список данных содержит вопросы раздела. Допустим, у меня есть 3 раздела, в каждом разделе есть 2 вопроса.
<asp:ListView ID="lvSection" runat="server">
<LayoutTemplate>
<div id="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<div>
<p><%#Eval("Section")%>
<asp:HiddenField ID="hfSectionId" runat="server" Value='<%#Eval("SectionId")%>' />
<hr />
</p>
</div>
<asp:DataList ID="dlQuestion" runat="server" >
<ItemTemplate>
<asp:Label ID="lblQuestion" runat="server" Text='<%# Eval("Question") %>'></asp:Label>
<asp:HiddenField ID="hfQuestionId" runat="server" Value='<%# Eval("QuestionId") %>' />
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:ListView>
<br/>
<asp:Button runat="server" Text="Submit" onclick="Submit_Click" />
Я пытаюсь получить доступ к dlQuestion списка данных, когда кнопка «Отправить» нажимается следующим образом:
Protected Sub Submit_Click(ByVal sender As Object, ByVal e As EventArgs)
'but I need to loop through all DataLists inside the ListView
'Maybe there are ways to get all the DataLists into a collection and then can loop through each one of them
'this will get only one DataList. Here's the pseudocode
Dim question As DataList = lvSection.FindControl("dlQuestion")
For Each item As DataListItem In quest.Items
Dim questionId As HiddenField = item.FindControl("hfQuestionId")
Next
End Sub
Но он ничего не возвращает, вопрос всегда остается без ответа. Я думаю, это потому, что в ListView теперь есть 3 DataList, из-за 3 разделов, и он больше не может найти DataList dlQuestion. Как мне получить доступ к этим спискам данных ListView из исходного кода? Мне нужно перебирать каждый элемент управления DataList.
Спасибо.
Ответ №1:
Вам нужно будет сделать это следующим образом:
for each item As ListViewDataItem in lvSection.Items
Dim list As DataList = item.FindControl("dlQuestion")
If (list IsNot Nothing) Then
For Each dlItem As DataListItem In quest.Items
Dim questionId As HiddenField = dlItem.FindControl("hfQuestionId")
Next
End If
Next
Сначала вы должны получить доступ к списку данных в каждом элементе ListView, а не на уровне listview.