Как найти элемент управления, расположенный внутри шаблона элемента списка данных

как мне найти элемент управления в моем списке данных? Даже если я использую use FindControl, это не сработает.

    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>

person BinQuan    schedule 30.10.2013    source источник
comment
Ваш код выглядит хорошо. Можете ли вы также опубликовать разметку для списка данных?   -  person afzalulh    schedule 30.10.2013
comment
Какую ошибку вы получаете?   -  person Suraj Singh    schedule 30.10.2013
comment
Это разметка, и я не получил никакой ошибки, просто она не показывает, что я хочу. @afzalulh   -  person BinQuan    schedule 30.10.2013
comment
только то, что он не показывает то, что я хочу. Что это означает, что вы не получаете элементы управления в методе FindControl или ваш список данных не показывает правильные данные.   -  person Suraj Singh    schedule 30.10.2013
comment
OnItemDataBound=DataList1ItemDataBound не совпадает с именем события protected void DataList1_ItemDataBound(отправитель объекта, DataListItemEventArgs e)   -  person Mahmoude Elghandour    schedule 30.10.2013


Ответы (4)


Вы привязываете ItemDatabound к неправильному методу. В разметке у вас есть:

 OnItemDataBound="DataList1ItemDataBound"

Измените его на:

 OnItemDataBound="DataList1_ItemDataBound"

Потому что метод, который имеет код для доступа к элементам управления:

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
person afzalulh    schedule 30.10.2013

Это работает на моем конце

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{
    Label Label1 = e.Item.FindControl("Label1") as Label;
}
person Dusht    schedule 30.10.2013

Вам может понадобиться что-то вроде этого:

Label MCQ_TYPELabel1 = DataList1.Items[1].FindControl("MCQ_TYPELabel") as Label;
person Vishwajeet Kulkarni    schedule 30.10.2013
comment
Что это такое? =DL_Question.**Items[n]** . - person BinQuan; 30.10.2013
comment
DL_Question — это элемент управления DataList, а Items[n] — индекс столбца элемента управления, который вы хотите найти. Я вношу изменения в свой ответ. Пожалуйста, посмотри. - person Vishwajeet Kulkarni; 30.10.2013

Сначала вам нужно связать список данных, а затем зациклить его

foreach ( DataListItem li in DataList1.Items )
{
    TextBox txt= (TextBox) li.FindControl("TextBox1");
}
person Delta    schedule 30.10.2013