Вопрос по gridview, c#, selectedvalue, drop-down-menu – C # получает выбранное значение из выпадающего списка в gridview asp net

2

Как я могу изменить значение текстового поля всякий раз, когда в раскрывающемся списке в виде сетки изменяется его значение?

При загрузке страницы в текстовом поле отображается выбранное значение, но когда я изменяю выбор в раскрывающемся списке, значение текстового поля не изменяется.

Код ниже.

<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   ответа
3

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
    }
}
3

Вам нужно использовать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;
}
Я могу получить значение только после обратной передачи, и с точки останова значение всегда является первым выбором. если я выберу второй вариант, он не перейдет в текстовое поле. gogogo
Отредактировал ответ, разместите точку останова внутриSelectedIndexChanged и посмотрите, какое значение имеет выпадающий список.
я обновил свой код, он работает после добавления обратной передачи, но после добавления новой строки в gridview выпадающий список становится пустым ... действительно потерян здесь gogogo
привет, спасибо за ваш ответ, но теперь я не могу получить текст для отображения в текстовом поле ... gogogo
0

тогда я кодирую вот так ... но я не использовал атрибут 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>
0

е привязать textbox.Text к selecteditem.value, это обеспечит правильное обновление

привет спасибо за ответ но я довольно новичок в этом, как мне это сделать ?? gogogo

Похожие вопросы