Click here to Skip to main content
Click here to Skip to main content

Editable GridView in ASP.NET 2.0

By , 26 Nov 2012
 

EditableGridView

Introduction

This article will give you an overview of how to use an asp:GridView completely, and how to use RowEditing, RowUpdating, RowDeleting, RowCommand, RowDataBound, RowCancelingEdit, and Pagination in a DataGrid. From this article, you will have a clear view of the GridView data insert, delete, and update operations.

Background

GridView is a very popular control in ASP.NET, and for website development, it is a very important control. This control is especially important for CRUD operations.

Using the code

Make two tables in a database: Contact and ContactType. This is just an example of how we shall add, edit, and delete data in a GridView. I have also used a textbox, a drop down list, and a checkbox which we use in the case of data add, delete, and update.

Step by step

Take a web project, go to an .aspx page, for example, Default.aspx, and add an ASP.NET GridView:

<asp:GridView ID="grdContact" runat="server" 
 AutoGenerateColumns="False" DataKeyNames="Id, Type" 
 OnRowCancelingEdit="grdContact_RowCancelingEdit" 
 OnRowDataBound="grdContact_RowDataBound" 
 OnRowEditing="grdContact_RowEditing" 
 OnRowUpdating="grdContact_RowUpdating" ShowFooter="True" 
 OnRowCommand="grdContact_RowCommand" 
 OnRowDeleting="grdContact_RowDeleting">

This is the GridView with all the necessary properties enabled and the events called.

For every column of the GridView, we need to make an <asp:TemplateField> field. I am using an <EditItemTemplate> to put the edit control, an <ItemTemplate> to bind data in a control, and a <FooterTemplate> to insert the control. Here is an example of a template field:

<asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left"> 
   <EditItemTemplate> 
    <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox> 
   </EditItemTemplate> 
   <FooterTemplate> 
    <asp:TextBox ID="txtNewName" runat="server" ></asp:TextBox> 
   </FooterTemplate> 
   <ItemTemplate> 
    <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label> 
   </ItemTemplate>
</asp:TemplateField>

Editable_GridView/Editable_GridView2.png

Let's take a look at the code for the GridView:

  1. Initialize the GridView: To fill data in the GridView, I have written a method named FillGrid() which takes data from a DataTable and shows it in the grid.
        public void FillGrid()
        {
            ContactTableAdapter contact = new ContactTableAdapter();
            DataTable contacts = contact.GetData();        
            if (contacts.Rows.Count > 0)
            {
                grdContact.DataSource = contacts;
                grdContact.DataBind();
            }
            else
            {
                contacts.Rows.Add(contacts.NewRow());
                grdContact.DataSource = contacts;
                grdContact.DataBind();
    
                int TotalColumns = grdContact.Rows[0].Cells.Count;
                grdContact.Rows[0].Cells.Clear();
                grdContact.Rows[0].Cells.Add(new TableCell());
                grdContact.Rows[0].Cells[0].ColumnSpan = TotalColumns;
                grdContact.Rows[0].Cells[0].Text = "No Record Found";
            }
        }
  2. Fill dynamic values: There are two dropdownlist controls available in this example. One of the dropdownlists dynamically loads data from another table. In the RowDataBound event of the GridView control, insert the following code:
        protected void grdContact_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            ContactTypeTableAdapter contactType = new ContactTypeTableAdapter();
            DataTable contactTypes = contactType.GetData();
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Label lblType = (Label)e.Row.FindControl("lblType");
                if (lblType != null)
                {
                    int typeId = Convert.ToInt32(lblType.Text);
                    lblType.Text = (string)contactType.GetTypeById(typeId);
                }
                DropDownList cmbType = (DropDownList)e.Row.FindControl("cmbType");
                if (cmbType != null)
                {   
                    cmbType.DataSource = contactTypes;
                    cmbType.DataTextField = "TypeName";
                    cmbType.DataValueField = "Id";
                    cmbType.DataBind();
                    cmbType.SelectedValue = 
                      grdContact.DataKeys[e.Row.RowIndex].Values[1].ToString();
                }
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                DropDownList cmbNewType = (DropDownList)e.Row.FindControl("cmbNewType");
                cmbNewType.DataSource = contactTypes;
                cmbNewType.DataBind();
            }
        }
  3. Insert data: I have initialized the GridView control with the DataTable, and also have some values filled in the footer dropdownlist, cmbNewType. Except Id, I have put FooterTemplate for every column because all the field are available. Clicking on "Insert" will enter data in your database table.
    protected void grdContact_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        ContactTableAdapter contact = new ContactTableAdapter();
        bool flag= false;
        if (e.CommandName.Equals("Insert"))
        {
            TextBox txtNewName = 
              (TextBox)grdContact.FooterRow.FindControl("txtNewName");
            CheckBox chkNewActive = 
              (CheckBox)grdContact.FooterRow.FindControl("chkNewActive");
            DropDownList cmbNewType = 
              (DropDownList)grdContact.FooterRow.FindControl("cmbNewType");
            DropDownList ddlNewSex = 
              (DropDownList)grdContact.FooterRow.FindControl("ddlNewSex");
            if (chkNewActive.Checked) flag = true; else flag = false;
            contact.Insert(txtNewName.Text, ddlNewSex.SelectedValue, 
                           cmbNewType.SelectedValue, flag);
            FillGrid();
        }
    }
  4. Update data: In the case of data update, we do the same things as the insert. In the case of insert, I always took the footer row, but in the case of update, I take the current RowIndex or the selected RowIndex. Click on Edit first, then call RowEditing, then the update and cancel options come.
    protected void grdContact_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        ContactTableAdapter contact = new ContactTableAdapter();
        bool flag = false;
        Label lblId = (Label)grdContact.Rows[e.RowIndex].FindControl("lblId");
        TextBox txtName = (TextBox)grdContact.Rows[e.RowIndex].FindControl("txtName");
        CheckBox chkActive = 
          (CheckBox)grdContact.Rows[e.RowIndex].FindControl("chkActive");
        DropDownList cmbType = 
          (DropDownList)grdContact.Rows[e.RowIndex].FindControl("cmbType");
        DropDownList ddlSex = 
          (DropDownList)grdContact.Rows[e.RowIndex].FindControl("ddlSex");
        if (chkActive.Checked) flag = true; else flag = false;
        contact.Update(txtName.Text, ddlSex.SelectedValue, 
                       cmbType.SelectedValue, flag,Convert.ToInt32(lblId.Text));
        grdContact.EditIndex = -1;
        FillGrid();
        
    }
    protected void grdContact_RowEditing(object sender, GridViewEditEventArgs e)
    {
        grdContact.EditIndex = e.NewEditIndex;
        FillGrid();
    }
    protected void grdContact_RowCancelingEdit(object sender, 
                              GridViewCancelEditEventArgs e)
    {
        grdContact.EditIndex = -1;
        FillGrid();
    }
  5. Deleting data: Now, you may need to delete data. The GridView calls RowDeleting for the delete event.
    protected void grdContact_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        ContactTableAdapter contact = new ContactTableAdapter();
        int id = Convert.ToInt32(grdContact.DataKeys[e.RowIndex].Values[0].ToString());
        contact.Delete(id);
        FillGrid();
    }

Points of Interest

So, now you have a DatGrid that is editable? Do you want to use CSS to give an excellent look of your grid? Just go to this link for a GridView CSS.

Happy coding Smile | :)

History

I was working on an admin panel in one of my projects, and saw that I needed many add, delete, and update operations for that panel. Now, I can easily solve that problem without a lot of programming by using an editable GridView. Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Ashrafur Rahaman
Software Developer (Senior)
Canada Canada
Member
Software engineer with broad experience in enterprise application development, product deployment automation, software test & test automation, application & system management, and manage big projects and team using proven agile technologies.
 
Passionate on Microsoft technologies, developed solutions using C#, .net (1.1/2.0/3.5/4), SQL Server (2005/2008). Work on Powershell, SSRS, SSIS, WPF, Ajax, WCF, JQuery.
 
Develop innovative application with cutting edge technologies always boosting inside.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 2 PinmemberAbhijeet Patil19 May '13 - 1:27 
GeneralMy vote of 3 PinmemberMember 99584925 Apr '13 - 13:54 
GeneralMy vote of 5 PinmemberMenon Santosh27 Mar '13 - 20:31 
Question.Problem accessing xsd PinmemberDimaz Janu19 Mar '13 - 16:44 
QuestionShowing 5 Errors PinmemberGirish_Sharma16 Mar '13 - 1:31 
QuestionHide Insert option PinmemberGirish_Sharma14 Mar '13 - 19:42 
QuestionDefinition of ContactTypeTableAdapter PinmemberVineesh Madhavan28 Feb '13 - 0:01 
QuestionNeed advice PinmemberDimaz Janu26 Feb '13 - 17:22 
GeneralMy vote of 5 PinmemberDimaz Janu26 Feb '13 - 17:08 
QuestionThank you Ashrafur - this was very helpful PinmemberGinger Decker25 Feb '13 - 10:26 
GeneralMy vote of 5 PinmemberVarun Sareen10 Dec '12 - 18:30 
GeneralMy vote of 3 PinmemberMd. Humayun Rashed26 Nov '12 - 4:42 
Questionnice:) PinmemberAshwin78626 Sep '12 - 21:44 
GeneralMy vote of 5 Pinmembersaikiranmai4 Sep '12 - 21:29 
QuestionEdit update Delete in Gridview Pinmemberjigs080817 Aug '12 - 5:29 
QuestionGood Pinmemberpadma777.vathi29 Jul '12 - 21:15 
GeneralMy vote of 3 Pinmemberpadma777.vathi29 Jul '12 - 21:12 
GeneralLimited select query and XSD file Pinmembermaxgo17 Jul '12 - 10:52 
GeneralTwo footers? [modified] Pinmembershawnperolis12 Jul '12 - 4:50 
GeneralMy vote of 4 Pinmemberdippaul31 May '12 - 0:04 
GeneralMy vote of 1 PinmemberDestiny7777 May '12 - 15:16 
GeneralMy vote of 5 PinmemberLSADev2 May '12 - 9:37 
QuestionCan you post the SQL DB Creation Script for the Database used for this Article ? PinmemberMuzaffar Ali Rana5 Apr '12 - 8:21 
QuestionEdit event is not firing on one click Pinmembersupermario ballotelli20 Mar '12 - 19:46 
QuestionThe type or namespace name 'TestDatabaseTableAdapters' could not be found PinmemberJustin Greene12 Mar '12 - 3:33 
GeneralMy vote of 2 PinmemberAlexander M. Batishchev22 Dec '11 - 9:59 
QuestionGood Work PinmemberSachin Dubey13 Sep '11 - 22:53 
GeneralMy vote of 4 PinmemberUday Kumar B R11 Aug '11 - 1:01 
QuestionHi Pinmemberariel_alava7 Jul '11 - 23:13 
GeneralMy vote of 5 PinmemberMember 327776020 May '11 - 4:03 
GeneralMy vote of 1 Pinmembervikas dumbre11 May '11 - 3:18 
GeneralInvalid Object name 'Contact' PinmemberRayH10664 May '11 - 22:33 
GeneralAbout ContactTableAdapter Pinmembermanjeet_2426 Apr '11 - 0:04 
Generalneed ur urgent help Pinmembersagar r.14 Apr '11 - 13:40 
GeneralMy vote of 4 Pinmemberjacky4lad16 Mar '11 - 19:20 
GeneralMy vote of 4 PinmemberVjayraj8 Mar '11 - 19:04 
Questionproblem in grid Pinmemberpatelpriyanka213 Mar '11 - 23:21 
GeneralHai Friends!!!! just try this link for gridview insert,update and delete without writing a single piece of code Pinmembervijay_vignesh11 Jan '11 - 3:03 
GeneralMy vote of 3 Pinmemberhemantbhadesia23 Nov '10 - 19:37 
GeneralGreat job! PinmemberKyryll99930 Aug '10 - 13:54 
GeneralMy vote of 4 Pinmemberd_uvarajan22 Jul '10 - 3:56 
Generalusing TestDatabaseTableAdapters PinmemberYuppski11 May '10 - 2:12 
GeneralExcellent PinmemberTerceros22 Apr '10 - 17:40 
GeneralToo complex PinmemberKedar Vijay Kulkarni3 Jan '10 - 23:02 
GeneralMy vote of 1 PinmemberNaveen.255920 Dec '09 - 23:30 
GeneralMy vote of 1 PinmemberAJFK30 Sep '09 - 9:26 
QuestionHow To Edit Grid View In Asp.net Using VB.... PinmemberRavindra VL22 Sep '09 - 2:55 
QuestionHow to hide the footer row when editing... Pinmemberdanteprax15 Jul '09 - 9:01 
GeneralDB Script. Pinmemberjaved_alam78630 Jun '09 - 0:01 
QuestionWhere is the database boss? PinmemberJags12121 May '09 - 1:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 26 Nov 2012
Article Copyright 2008 by Ashrafur Rahaman
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid