2012-02-08 2 views
0

У меня есть источник данных, который должен собирать информацию для ярлыка. Они находятся внутри DataList, который подключен к другому источнику данных. Когда я отлаживаю приложение, значение равно Nothing. Я думал, что у меня есть вербальное право, так как нет четких линий, но он не работает. Может кто-нибудь помочь мне найти источник данных, чтобы я мог выполнить этот проект?Вложенный DataSource не найден

Я пробовал FindControl("dsPicklist") и DirectCast(FindControl("dsPicklist"), SqlDataSource), но никто не получил возвращаемое значение.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ' Find the nested DataSource control in the DataList. 
    Dim ds As SqlDataSource = DirectCast(FindControl("dsPicklist"), SqlDataSource) 
    'convert the DataSource into a dataView 
    Dim dv As DataView = DirectCast(ds.[Select](DataSourceSelectArguments.Empty), DataView) 
    For Each drv As DataRowView In dv 
     'Find the label 
     Dim lbl As Label = FindControl("Label3") 
     'Display the data into the label 
     lbl.Text = dv("TEXT").ToString 
    Next 
End Sub 

<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" 
Width="100%" CellPadding="4" ForeColor="#333333"> 
<ItemTemplate> 
<asp:HiddenField ID="hiddenPicklistID" runat="server" 
Value='<%# Bind("PicklistID") %>' /> 
<asp:Label ID="Label3" runat="server"></asp:Label> 
    <asp:SqlDataSource ID="dsPicklist" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>" 
    SelectCommand="SELECT p.TEXT FROM PICKLIST p 
        JOIN C_Survey_Questions c 
        ON p.PICKLISTID = c.PicklistID 
        AND c.QuestionID = @QuestionID 
        AND c.SurveyID = @SurveyID 
        WHERE p.PICKLISTID IS NOT NULL 
        AND c.PicklistID IS NOT NULL"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="DropDownList1" Name="SurveyID" 
     PropertyName="SelectedValue" Type="Int32" /> 
     <asp:ControlParameter ControlID="HiddenField2" Name="QuestionID" 
     PropertyName="Value" Type="Int32" /> 
    </SelectParameters> 
    </asp:SqlDataSource> 
</ItemTemplate> 
</asp:DataList> 

ответ

0

Хотя я не знаю, почему у вас есть SqlDataSource внутри DataList, у вас есть некоторые ошибки в коде. Вы должны добавить <ItemTemplate> в свою разметку.

<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" 
    Width="100%" CellPadding="4" ForeColor="#333333"> 
    <ItemTemplate> 
    <asp:HiddenField ID="hiddenPicklistID" runat="server" 
     Value='<%# Bind("PicklistID") %>' /> 
    <asp:Label ID="Label3" runat="server"></asp:Label> 
    <asp:SqlDataSource ID="dsPicklist" runat="server" 
     ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>" 
     SelectCommand="SELECT p.TEXT FROM PICKLIST p 
         JOIN C_Survey_Questions c 
         ON p.PICKLISTID = c.PicklistID 
         AND c.QuestionID = @QuestionID 
         AND c.SurveyID = @SurveyID 
         WHERE p.PICKLISTID IS NOT NULL 
         AND c.PicklistID IS NOT NULL"> 
      <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownList1" Name="SurveyID" 
       PropertyName="SelectedValue" Type="Int32" /> 
      <asp:ControlParameter ControlID="HiddenField2" Name="QuestionID" 
       PropertyName="Value" Type="Int32" /> 
      </SelectParameters> 
    </asp:SqlDataSource> 
    </ItemTemplate> 
</asp:DataList> 

И в своем коде вы найдете SqlDataSource контроль внутри DataList1.Items

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    'Make sure DataList1 is databound before doing this 

    For Each item As DataListItem In DataList1.Items 
     Dim lbl As Label = DirectCast(item.FindControl("Label3"), Label) 
     Dim ds As SqlDataSource = DirectCast(item.FindControl("dsPicklist"), SqlDataSource) 
    Next 
End Sub 
+0

Упс, извините. 'ItemTemplate' есть. Я просто скопировал и вставил части страницы, потому что другие ярлыки не имеют отношения к этому вопросу. Я поместил источник данных в datalist, чтобы было проще, чтобы скрытое поле и источник данных находили друг друга. Я попытался поставить дополнительный источник данных за пределы списка раньше, и у него были проблемы со скрытым полем. – jlg

+0

Я не могу ничего найти. Код, который вы написали, кажется, именно то, что мне нужно, но я думаю, что я просто не привязываюсь к делу? Сначала я просто написал 'DataList1.DataBind()', но ничего не появилось в метке. С тех пор я переписал его много раз, и каждый раз, когда я не получаю никаких результатов. Результаты запроса отображаются только в списке с маркировкой, потому что их так много параметров, но я не могу использовать маркированный список, потому что пользователь должен иметь возможность нажимать «да» или «нет», потому что это для опроса. – jlg

+0

Я думаю, вам нужен еще один вложенный DataList внутри первого, у которого есть метка, которую вы хотите повторить. А чем установить datasource этого datalist в dsPicklist. И вам не понадобится кодовое слово. – Magnus

Смежные вопросы