Edit GridView (ASP.NET 20 / C#)

I have a gridview with one column called "Advertiser". When the "Edit" button is clicked, the litteral-control shall be replaced with an textbox control, and the "Edit button shall be replaced with "Save" and "Cancel" buttons.

The datagrid is filled correctly with data, but I dont know how to write the "Update" or "Cancel" command.
Here is my code so far:


--------------
ASPX
--------------

<asp:GridView runat="server" id="grdAdvertisers" AutoGenerateColumns="false" ShowHeader="false" OnRowEditing="grdAdvertisers_RowEditing">
    <EditRowStyle BackColor="yellow" />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton CommandName="Edit" Text="Edit" Width="45px" runat="server" />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:LinkButton CommandName="Update" Text="Update" Width="45px" runat="server" />
                <asp:LinkButton CommandName="Cancel" Text="Cancel" Width="45px" runat="server" />
            </EditItemTemplate>                  
        </asp:TemplateField>
        <asp:TemplateField>
             <ItemTemplate>
               <%# DataBinder.Eval(Container.DataItem,"AdvertiserName") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="txtAdvertiser" Text='<%# DataBinder.Eval(Container.DataItem,"AdvertiserName") %>' />
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


------------------
ASPX.CS
------------------

    private void bindAdvertisers()
    {
        SqlConnection Conn = new SqlConnection(Variables.ConnString);
        SqlCommand cmd = new SqlCommand("usp_AdvertiserNames", Conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        this.grdAdvertisers.DataSource = dr;
        this.grdAdvertisers.DataBind();
        cmd.Connection.Close();
        cmd.Dispose();
        Conn.Dispose();
    }


    protected void grdAdvertisers_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //Response.Write(e.NewEditIndex);
    }
LVL 1
webressursAsked:
Who is Participating?
 
Bob LearnedCommented:
If you need to stick to that kind of layout, then I would suggest something like this example:

      <asp:GridView ID="GridView2" runat="server" Style="z-index: 103; left: 144px; position: absolute;
        top: 212px" AutoGenerateColumns="False" OnRowCancelingEdit="GridView2_RowCancelingEdit"
        OnRowEditing="GridView2_RowEditing" OnRowUpdating="GridView2_RowUpdating">
        <Columns>
          <asp:BoundField DataField="name" HeaderText="Name" />
          <asp:BoundField DataField="number" HeaderText="Number" />
          <asp:TemplateField>
            <ItemTemplate>
              <asp:LinkButton ID="linkEdit" CommandName="Edit" Text="Edit" Width="45px" runat="server"
                OnClick="EditClick" />
            </ItemTemplate>
            <EditItemTemplate>
              <asp:LinkButton ID="linkUpdate" CommandName="Update" Text="Update" Width="45px" OnClick="UpdateClick"
                runat="server" />
              <asp:LinkButton ID="linkCancel" CommandName="Cancel" Text="Cancel" Width="45px" OnClick="CancelClick"
                runat="server" />
            </EditItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>

    protected void EditClick(object sender, EventArgs e)
    {
        LinkButton button = (LinkButton)sender;
        GridView grid = (GridView)this.FindParent(button, typeof(GridView));

        int index = GetItemIndex(button.UniqueID);
        grid.EditIndex = index;
        grid.DataBind();
    }

    protected void UpdateClick(object sender, EventArgs e)
    {
        LinkButton button = (LinkButton)sender;
    }

    protected void CancelClick(object sender, EventArgs e)
    {
        LinkButton button = (LinkButton)sender;
    }

    private int GetItemIndex(string input)
    {
        string pattern = @"ctl(?<index>\d+)";
        Match match = Regex.Match(input, pattern);

        if (match.Success)
            return int.Parse(match.Groups["index"].Value) - 2;
        return -1;
    }

    private Control FindParent(Control ctrl, Type type)
    {
        while (ctrl.GetType() != type)
            ctrl = ctrl.Parent;

        return ctrl;
    }

    protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
    {

    }
    protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView grid = (GridView)sender;
        grid.EditIndex = -1;
        grid.DataBind();
    }
    protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        // Execute update SQL.
    }

Bob
0
 
Bob LearnedCommented:
In order to get the buttons that you need, you should add CommandField columns through the designer:

                    <asp:CommandField ShowDeleteButton="True" />

Bob
0
 
webressursAuthor Commented:
Ok, but how do I change the button-name from "edit" to ex "edit this"...? How do I write the codebehind to actually execute a Stored Procedure with a parameter (ID)?
0
 
webressursAuthor Commented:
Thank you :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.