Вопрос по gridview, c#, selectedvalue, drop-down-menu – C # получает выбранное значение из выпадающего списка в gridview asp net
Как я могу изменить значение текстового поля всякий раз, когда в раскрывающемся списке в виде сетки изменяется его значение?
При загрузке страницы в текстовом поле отображается выбранное значение, но когда я изменяю выбор в раскрывающемся списке, значение текстового поля не изменяется.
Код ниже.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">
<Columns>
<asp:TemplateField HeaderText="Entry">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Duty">
<ItemTemplate>
<asp:DropDownList ID="duty" runat="server" OnLoad = "ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged" autopostback="true" EnableViewState="true"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Код ниже находится ниже.
protected void ddl1_load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
Duty dy = new Duty();
dt = dy.getdutyid(Convert.ToInt32(dropcontractid.SelectedValue));
DropDownList ddl = (DropDownList)sender;
ddl.DataSource = dt;
ddl.DataTextField = "dutyid";
ddl.DataValueField = "dutyid";
ddl.DataBind();
TextBox1.Text = ddl.SelectedValue;
}
}
4
ответа
DropDownLists
вGridView
, Мое решение было настроитьonLoad
для раскрывающегося списка, чтобы он не переписывалDropDownList
на каждый пост обратно. Таким образом, если там что-то есть, оно не будет повторно заполнено.
protected void dropDownLoad(object sender, EventArgs e)
{
DropDownList dropDown = sender as DropDownList;
if (dropDown.SelectedValue == null || dropDown.SelectedValue == "")
{
// Your Code to populate table
}
}
Вам нужно использоватьSelectedIndexChanged
обработчик для отображения выбранного значения:
Markup:
<asp:DropDownList ID="duty" runat="server" OnLoad="ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged"></asp:DropDownList>
Code-behind:
protected void duty_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow gvr = (GridViewRow)(((Control)sender).NamingContainer);
DropDownList duty= (DropDownList) gvr.FindControl("duty");
TextBox1.Text = duty.SelectedItem.Value;
}
Я могу получить значение только после обратной передачи, и с точки останова значение всегда является первым выбором. если я выберу второй вариант, он не перейдет в текстовое поле.
Отредактировал ответ, разместите точку останова внутриSelectedIndexChanged и посмотрите, какое значение имеет выпадающий список.
я обновил свой код, он работает после добавления обратной передачи, но после добавления новой строки в gridview выпадающий список становится пустым ... действительно потерян здесь
привет, спасибо за ваш ответ, но теперь я не могу получить текст для отображения в текстовом поле ...
тогда я кодирую вот так ... но я не использовал атрибут onLoad, скажите мне, если это работает,
<asp:TemplateField HeaderText="duty" SortExpression="duty">
<EditItemTemplate>
<asp:TextBox ID="duty" runat="server" Text='<%# Bind("duty_Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblduty" runat="server" Text='<%# Eval("duty_Name") %>' />
<asp:DropDownList ID="ddlduty" runat="server" CssClass="dropdownlist"
OnLoad = "ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged" Visible = "false"
>
</asp:DropDownList>
</ItemTemplate>
<HeaderStyle Width="5%" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>