Chetan Bodke
Chetan Bodke

Reputation: 523

set text to textbox based on selected value from dropdownlist in gridview asp net

I have one Dropdown and one textBox in my gridview. gridview contains some subject name and in database there is fees for particular subject. I want to show that Fees into textbox on every value selected for dropdown.

i have done the same functionality which gives exact output what i want but not immediately after selection of subject, it gives value on button click.

may be i have done something wrong but not found exact solution please help.

ASPX code :

<asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnRowDataBound="Gridview1_RowDataBound" CssClass="EU_DataTable">
    <Columns>
        <asp:TemplateField HeaderText="Program Name">
            <ItemTemplate>
                <asp:DropDownList ID="ddl_ProgList" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddl_ProgList_SelectedIndexChanged" ControlStyle-Width="160px">
                    <asp:ListItem Value="-1">Select</asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>

       <asp:TemplateField HeaderText="Fees">
            <ItemTemplate>
                <asp:TextBox ID="txt_fees" runat="server" ControlStyle-Width="75px"></asp:TextBox>
            </ItemTemplate>
            <FooterStyle HorizontalAlign="Right" />
            <FooterTemplate>
                <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Code Behind :

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Control ctrl = e.Row.FindControl("ddl_ProgList");
        if (ctrl != null)
        {
            DropDownList dd = ctrl as DropDownList;

            //SqlConnection conn = new SqlConnection(connStr);

            clsProg_TB objprg = new clsProg_TB();
            objprg.Center_Code = ddl_centerCode.SelectedItem.ToString();
            DataSet ds = clsUserLogicLayer.LoadPrograms(objprg);
            dd.DataTextField = "prg_Name";
            dd.DataValueField = "prg_Name";
            dd.DataSource = ds.Tables[0];
            dd.DataBind();
        }
    }
}
protected void ddl_ProgList_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = sender as DropDownList;

    foreach (GridViewRow row in Gridview1.Rows)
    {

        Control ctrl = row.FindControl("ddl_ProgList") as DropDownList;
        if (ctrl != null)
        {
            DropDownList ddl1 = (DropDownList)ctrl;

            if (ddl.ClientID == ddl1.ClientID)
            {
                TextBox txt2 = row.FindControl("txt_fees") as TextBox;
                clsProg_TB objprg = new clsProg_TB();
                objprg.Center_Code = ddl_centerCode.SelectedItem.ToString();
                objprg.Prg_Name = ddl1.SelectedItem.ToString();
                DataSet ds = clsUserLogicLayer.getProgFees(objprg);
                if (ds.Tables[0].Rows.Count != 0)
                {
                    txt2.Text = ds.Tables[0].Rows[0][0].ToString(); 
                }
            }
        }
    }
}

Upvotes: 0

Views: 2633

Answers (1)

Anil
Anil

Reputation: 3752

You can try to update Row and the bind the gridview again. You also need to set GridView.SetEditRow() before starting editing. Another way is to update your dataTable and bind it again.

   protected void ddl_ProgList_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = sender as DropDownList;

    foreach (GridViewRow row in Gridview1.Rows)
    {
GridView.SetEditRow(row.RowIndex); 


        Control ctrl = row.FindControl("ddl_ProgList") as DropDownList;
        if (ctrl != null)
        {
            DropDownList ddl1 = (DropDownList)ctrl;

            if (ddl.ClientID == ddl1.ClientID)
            {
                TextBox txt2 = row.FindControl("txt_fees") as TextBox;
                clsProg_TB objprg = new clsProg_TB();
                objprg.Center_Code = ddl_centerCode.SelectedItem.ToString();
                objprg.Prg_Name = ddl1.SelectedItem.ToString();
                DataSet ds = clsUserLogicLayer.getProgFees(objprg);
                if (ds.Tables[0].Rows.Count != 0)
                {
                    txt2.Text = ds.Tables[0].Rows[0][0].ToString(); 
                }
            }
        }
         Gridview1.UpdateRow(row.RowIndex, false);
    }
Gridview1.DataBind();
}

Upvotes: 1

Related Questions