Доступ к каталогам данных внутри ListView

#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.