2013-10-30 32 views
1

我如何在我的datalist中找到控件? 即使我使用使用FindControl,它不起作用。如何找到位于datalist项目模板内的控件

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || 
     e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      DataRowView drv = (DataRowView)(e.Item.DataItem); 

       Label ResponseCatIDLabel = (Label)e.Item.FindControl("ResponseCatIDLabel"); 
       string res = ResponseCatIDLabel.Text; 

       TextBox TextBox1 = (TextBox)e.Item.FindControl("TextBox1"); 
       string text = TextBox1.Text; 

       Label MCQ_TYPELabel = (Label)e.Item.FindControl("MCQ_TYPELabel"); 
       string mcq = MCQ_TYPELabel.Text; 

       RadioButtonList ExcellentRb = (RadioButtonList)e.Item.FindControl("ExcellentRb"); 
       string excellent = ExcellentRb.Text; 

       RadioButtonList YesNoRb = (RadioButtonList)e.Item.FindControl("YesNoRb"); 
       string yesno = YesNoRb.Text; 

       Label RespnseCatIDLabel = (Label)e.Item.FindControl("RespnseCatIDLabel"); 
       string sqn = RespnseCatIDLabel.Text;    

       if (RespnseCatIDLabel.Text == "") 
       { 
        ExcellentRb.Visible = false; 
        YesNoRb.Visible = false; 
       } 

这是我设计代码的代码,有什么不对吗?

<asp:DataList ID="DataList1" runat="server" BackColor="White" 
      BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
      DataSourceID="SqlDataSource1" Font-Bold="False" 
      Font-Italic="False" Font-Names="Britannic Bold" Font-Overline="False" 
      Font-Strikeout="False" Font-Underline="False" GridLines="Vertical" 
      OnItemDataBound="DataList1ItemDataBound"> 
      <AlternatingItemStyle BackColor="Gainsboro" /> 
      <FooterStyle BackColor="#CCCCCC" ForeColor="Black" /> 
      <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" /> 
      <ItemStyle BackColor="#EEEEEE" ForeColor="Black" /> 
      <ItemTemplate> 

       QuestionNo:&nbsp;<asp:Label ID="SurveyQuestionNoLabel" runat="server" 
        Text='<%# Eval("SurveyQuestionNo") %>' /> 
       <br /> 
       &nbsp;<asp:Label ID="PoolQuestionLabel" runat="server" 
        Text='<%# Eval("PoolQuestion") %>' /> 
       <br /> 
       MCQ_TYPE: 
       <asp:Label ID="MCQ_TYPELabel" runat="server" Text='<%# Eval("MCQ_TYPE") %>' /> 
       <br /> 
        ResponseCatID: 
       <asp:Label ID="RespnseCatIDLabel" runat="server" 
        Text='<%# Eval("ResponseCatID") %>' /><br /> 
       <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox> 
       <br /> 

       <asp:RadioButtonList ID="YesNoRb" runat="server" DataSourceID="YesNoDB" 
        DataTextField="Response" DataValueField="ResponseValue"> 
       </asp:RadioButtonList> 
       <asp:SqlDataSource ID="YesNoDB" runat="server" 
        ConnectionString="<%$ ConnectionStrings:SurveyFdDBConnString %>" 
        SelectCommand="SELECT Response, ResponseValue FROM MCQ_Response_Options WHERE (Response = 'Yes') OR (Response = 'No') ORDER BY ResponseValue DESC"> 
       </asp:SqlDataSource> 
       <asp:RadioButtonList ID="ExcellentRb" runat="server" DataSourceID="ExcellentDB" 
        DataTextField="Response" DataValueField="ResponseValue"> 
       </asp:RadioButtonList> 
       <asp:SqlDataSource ID="ExcellentDB" runat="server" 
        ConnectionString="<%$ ConnectionStrings:SurveyFdDBConnString %>" 
        SelectCommand="SELECT ResponseCatID, Response, ResponseValue FROM MCQ_Response_Options WHERE (Response = 'Excellent') AND (ResponseValue = 5) AND (ResponseCatID = 'R1') OR (Response = 'Good') AND (ResponseValue = 4) AND (ResponseCatID = 'R1') OR (Response = 'Satisfactory') AND (ResponseValue = 3) AND (ResponseCatID = 'R1') OR (Response = 'Marginal') AND (ResponseValue = 2) AND (ResponseCatID = 'R1') OR (Response = 'Poor') AND (ResponseValue = 1) AND (ResponseCatID = 'R1') ORDER BY ResponseValue DESC"> 
       </asp:SqlDataSource> 
       <br /> 
      </ItemTemplate> 
      <SelectedItemStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" /> 
     </asp:DataList> 
+1

您的代码看起来不错。你也可以发布datalist的标记吗? – afzalulh

+0

你得到的错误是什么? –

+0

这是标记,我没有得到任何错误,只是它不显示我想要的。 @afzalulh – BinQuan

回答

0

你可能需要的东西是这样的:

Label MCQ_TYPELabel1 = DataList1.Items[1].FindControl("MCQ_TYPELabel") as Label; 
+0

那是什么? = DL_Question。** Items [n] **。 – BinQuan

+0

DL_Question是DataList控件&Items [n]是您想要查找的控件的列索引。我正在改变我的答案。请参见。 –

0

这是我的最终

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    Label Label1 = e.Item.FindControl("Label1") as Label; 
} 
+0

不适合我。 〜 – BinQuan

+0

你可以发布你的标记吗?因为你的代码似乎没问题。 – Dusht

0

首先工作,你需要将数据绑定列表,然后循环它

foreach (DataListItem li in DataList1.Items) 
{ 
    TextBox txt= (TextBox) li.FindControl("TextBox1"); 
} 
+0

通过这个-http://www.codeproject.com/Articles/23559/Working-with-the-DataList-Control –

2

您正在绑定ItemDatabou nd到错误方法。在标记你:

OnItemDataBound="DataList1ItemDataBound" 

将其更改为:

OnItemDataBound="DataList1_ItemDataBound" 

由于具有代码访问控制方法是:

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
相关问题