Solved

Edit GridView (ASP.NET 20 / C#)

Posted on 2006-11-29
4
71,934 Views
Last Modified: 2011-08-18
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);
    }
0
Comment
Question by:webressurs
  • 2
  • 2
4 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 18037294
In order to get the buttons that you need, you should add CommandField columns through the designer:

                    <asp:CommandField ShowDeleteButton="True" />

Bob
0
 
LVL 1

Author Comment

by:webressurs
ID: 18038820
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
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 18039304
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
 
LVL 1

Author Comment

by:webressurs
ID: 18044490
Thank you :)
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have developed many web applications with asp & asp.net and to add and use a dropdownlist was always a very simple task, but with the new asp.net, setting the value is a bit tricky and its not similar to the old traditional method. So in this a…
In this Article, I will provide a few tips in problem and solution manner. Opening an ASPX page in Visual studio 2003 is very slow. To make it fast, please do follow below steps:   Open the Solution/Project. Right click the ASPX file to b…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used.

792 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question