Microsoft Developer
Microsoft Developer

Reputation: 5459

Set selected value of dropdown list in Gridview.RowEditing

I am doing insert/update and delete in gridview. For that I am using ItemTemplate which contains labels to show the values. But when the gridview is in edit mode, the dropdown lists comes in place of that labels. I want to set the selected values of drop down lists to the values of labels. My drop down lists dont have datasource. I am binding dropdown list from 0 to 99. Below is the code for my edit method.

 protected void grdUsedCatheters_RowEditing(object sender, GridViewEditEventArgs e)
 {
    try
    {
        grdUsedCatheters.EditIndex = e.NewEditIndex;
        BindCatheterGrid();
        DropDownList ddlFrom = (DropDownList)grdUsedCatheters.Rows[e.NewEditIndex].FindControl("ddFrom");
        DropDownList ddlTo = (DropDownList)grdUsedCatheters.Rows[e.NewEditIndex].FindControl("ddTo");
        BindDropDowns(ddlFrom);
        BindDropDowns(ddlTo);

    }
    catch (Exception ex)
    {
        if (ex.HelpLink == null)
            lblMessage.Text = ex.Message;
        else
            lblMessage.Text = ex.HelpLink;
        lblMessage.CssClass = "ERROR";
    }

private void BindDropDowns(DropDownList ddl)
 {
    for (int i = 0; i <= 99; i++)
        ddl.Items.Add(i.ToString());
 }

below is the part of markup of my gridview

<asp:TemplateField HeaderText="Cine Run">
   <ItemTemplate>
        From:&nbsp;<asp:Label ID="lblFrom" runat="server" ><%# Eval("CineRunFrom")%></asp:Label>
        To:&nbsp;<asp:Label ID="lblTo" runat="server"><%# Eval("CineRunTo")%></asp:Label>
   </ItemTemplate>
   <EditItemTemplate>
       From:&nbsp;<asp:DropDownList ID="ddFrom" runat="server" Width="50px">
     </asp:DropDownList>
       To:&nbsp;<asp:DropDownList ID="ddTo" runat="server" Width="50px">
     </asp:DropDownList>
   </EditItemTemplate>
  <FooterTemplate>
       From:&nbsp;<asp:DropDownList ID="ddFromF" runat="server" Width="50px">              </asp:DropDownList>
       To:&nbsp;<asp:DropDownList ID="ddToF" runat="server" Width="50px">                                        </asp:DropDownList>
  </FooterTemplate>
 </asp:TemplateField>

} 

Upvotes: 0

Views: 22608

Answers (2)

ravidev
ravidev

Reputation: 2738

I think this example will work for you.

First you put hidden field in EditItemTemplate where u have put the Dropdownlist. Set the value of hidden field as you set the value of label in ItemTemplate

See my code:

<asp:GridView runat="server" ID="gridExample" OnRowEditing="gridExample_RowEditing"
            AutoGenerateEditButton="True" AutoGenerateColumns ="false" OnRowCancelingEdit ="gridExample_RowCancelingEdit" >
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblID" Text='<%# Eval("ID") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList runat="server" ID="drpName">
                        </asp:DropDownList>
                        <asp:HiddenField runat ="server" ID ="hdnId" Value ='<%# Eval("ID") %>' />
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblName" Text='<%# Eval("Name") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate >
                    <asp:TextBox runat ="server" ID="txtName" Text ='<%# Eval("Name") %>'  ></asp:TextBox>
                    </EditItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>




protected void gridExample_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gridExample.EditIndex = e.NewEditIndex;
            BindGrid();

            DropDownList dl=new DropDownList ();
            dl = (DropDownList)gridExample.Rows[gridExample.EditIndex].FindControl("drpName");
            FillDrops(dl);

            HiddenField hdnId = new HiddenField();
            hdnId = (HiddenField)gridExample.Rows[gridExample.EditIndex].FindControl("hdnId");
            dl.Text = hdnId.Value;

        }

Upvotes: 1

Waqas
Waqas

Reputation: 6812

Retrieve the values of label's before setting grdUsedCatheters.EditIndex = e.NewEditIndex and calling BindCatheterGrid() method and then after populating the DropDownLists set their selected value accordingly. Like this:

protected void grdUsedCatheters_RowEditing(object sender, GridViewEditEventArgs e)
 {
    try
    {
        Label lblFrom = (Label)grdUsedCatheters.Rows[e.NewEditIndex].FindControl("lblFrom"); //lblFrom is the ID of label

        grdUsedCatheters.EditIndex = e.NewEditIndex;
        BindCatheterGrid();
        DropDownList ddlFrom = (DropDownList)grdUsedCatheters.Rows[e.NewEditIndex].FindControl("ddFrom");
        DropDownList ddlTo = (DropDownList)grdUsedCatheters.Rows[e.NewEditIndex].FindControl("ddTo");
        BindDropDowns(ddlFrom);
        BindDropDowns(ddlTo);

        ddlFrom.Text = lblFrom.Text;

    }
    catch (Exception ex)
    {
        if (ex.HelpLink == null)
            lblMessage.Text = ex.Message;
        else
            lblMessage.Text = ex.HelpLink;
        lblMessage.CssClass = "ERROR";
    }

}

Edit and also change your gridview markup like this:

<asp:TemplateField HeaderText="Cine Run">
   <ItemTemplate>
        From:&nbsp;<asp:Label ID="lblFrom" runat="server" Text='<%# Eval("CineRunFrom")%>' />
        To:&nbsp;<asp:Label ID="lblTo" runat="server" Text='<%# Eval("CineRunTo")%>' />
   </ItemTemplate>
...

Upvotes: 3

Related Questions