#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.
Если вы предоставите дополнительную информацию о том, в чем заключается ваша реальная проблема, мы могли бы найти альтернативное решение.