Как получить ссылку на выпадающий список в codebehind?

#c# #.net #asp.net #gridview #updatepanel

#c# #.net #asp.net #просмотр сетки #панель обновления

Вопрос:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  Onrowupdating="GridView1_RowUpdating" onrowediting="GridView1_RowEditing">
    <Columns>
        <asp:TemplateField HeaderText="Test">
            <EditItemTemplate>
                <asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
                            OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                            <asp:ListItem>Test1</asp:ListItem>
                            <asp:ListItem>Test2</asp:ListItem>
                            <asp:ListItem>Test3</asp:ListItem>
                        </asp:DropDownList>
                    </ContentTemplate>
                </asp:UpdatePanel>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("SS") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Rate">
            <EditItemTemplate>
                <asp:UpdatePanel ID="up2" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:DropDownList ID="DropDownList2" runat="server" />
                    </ContentTemplate>
                </asp:UpdatePanel>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text="Label" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="True" />
    </Columns>
</asp:GridView>
  

Как получить ссылку на DropDownList2 в DropDownList1_SelectedIndexChanged , когда сетка находится в режиме редактирования?

Ответ №1:

После редактирования вашего вопроса. вы можете добиться подобного…

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList DropDownList2 = ((DropDownList)((DropDownList)sender).Parent.FindControl("DropDownList2"));
}
  

Комментарии:

1. Это не существует вне режима редактирования — это часть вашего шаблона редактирования.

2. @james; тогда вы смотрите в событии обновления строки? Я обновил свой ответ.

3. @jams; Обновил мой ответ. попробуйте сейчас.

Ответ №2:

Вы должны иметь доступ к нему в GridView1_RowEditing . Вам нужно будет назначить его элементу управления, используя что-то вроде:

 DropDownList list = e.Row.FindControl("DropDownList1") as DropDownList;
  

РЕДАКТИРОВАТЬ: Основываясь на новой информации, это должно сделать это:

 int index = -1;

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
 index = e.Row.Index;
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
 DropDownList DropDownList2 = GridView1.Rows[index].FindControl("DropDownList2") as DropDownList;
}
  

Комментарии:

1. Сетка находится в режиме редактирования, DropDownList1 виден, в это время я должен получить ссылку на него вне сетки.

2. Это не существует вне режима редактирования — это часть вашего шаблона редактирования. Вы имеете в виду, что вам нужно получить значение из него после того, как оно изменилось? Я вижу там автоматическую отправку.

3. @ jesus.tesh: NULL ссылка возвращается.

4. Возможно, из-за автоматической отправки в ваш выпадающий список просмотр сетки больше не находится в режиме редактирования? Я знаю, что у вас там есть UpdatePanels, но я не могу понять, почему это дало бы нулевую ссылку? Выпадающий список 2 находится в той же строке, что и выпадающий список 1, поэтому единственное, о чем я могу думать, это то, что вы больше не находитесь в режиме редактирования для GridView?

Ответ №3:

Я не думаю, что вы можете получить ссылку на выпадающий список в codebehind, поскольку он не существует. В вашем примере выпадающий список будет существовать только в режиме обновления, так что вам здесь не повезло. Однако вы могли бы добавить ее динамически, то есть создав GridView или добавив шаблоны в codebehind.

Если вы предоставите дополнительную информацию о том, в чем заключается ваша реальная проблема, мы могли бы найти альтернативное решение.