2012-02-08 4 views
0

레이블에 대한 정보를 수집해야하는 데이터 소스가 있습니다. 이들은 모두 다른 DataSource에 연결된 DataList 안에 있습니다. 내 응용 프로그램을 디버깅 할 때 값은 Nothing입니다. 나는 구불 구불 한 선이 없기 때문에 나는 베벌리를 가지고 있다고 생각했으나 작동하지 않습니다. 누군가이 프로젝트를 완료 할 수 있도록 데이터 소스를 찾도록 도와 줄 수 있습니까?중첩 된 데이터 소스를 찾을 수 없습니다.

나는 FindControl("dsPicklist")DirectCast(FindControl("dsPicklist"), SqlDataSource)을 시도했지만 둘 다 값을 반환하지 않습니다. 난 당신이 DataList 내부 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

, 당신은 코드에서 몇 가지 오류가 있습니다. 마크 업에 <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> 

그리고 코드에서

당신은 죄송 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

으악 내부 SqlDataSource 제어를 찾을 수 있습니다. 'ItemTemplate'이 있습니다. 다른 레이블이이 질문과 관련이 없으므로 페이지의 일부만 복사하여 붙여 넣었습니다. 나는 숨겨진 필드와 데이터 소스가 서로를 쉽게 찾을 수 있도록 데이터 소스 안에 데이터 소스를 넣었다. 이전에 목록 밖에서 여분의 데이터 소스를 넣으려고했지만 숨겨진 필드에 문제가있었습니다. – jlg

+0

나는 아무것도 나타나지 않습니다. 당신이 쓴 코드는 내가 필요로하는 것처럼 보이지만 나는 단지 데이터 바인딩이 맞지 않다고 생각하니? 처음에는'DataList1.DataBind()'를 썼으나 레이블에는 아무 것도 나타나지 않았습니다. 그 이후로 나는 그것을 여러 번 다시 쓰고, 결과가 없을 때마다. 쿼리의 결과는 너무 많은 옵션이므로 글 머리 기호 목록에 잘 표시되지만 사용자가 예 또는 아니요를 클릭 할 수 있어야하므로 글 머리 기호 목록을 사용할 수 없습니다. – jlg

+0

반복하려는 레이블이있는 첫 번째 내부에 다른 중첩 DataList가 필요하다고 생각합니다. 그리고 그 데이터리스트의 데이터 소스를 dsPicklist로 설정하십시오. 그리고 코드 숨김이 필요 없습니다. – Magnus

관련 문제