In this article, I’ll explain how to Edit records in ASP.Net GridView control using jQuery Dialog UI. There is many other way to do that but here is the easiest way to do it.
Database:
For this tutorial, I am using Employee database.
CREATE TABLE [dbo].[T_Employees]( [ID] [int] IDENTITY(1,1) NOT NULL, [FirstName] [nvarchar](20) NULL, [LastName] [nvarchar](20) NULL, [Department] [nvarchar](40) NULL, [Location] [nvarchar](40) NULL ) ON [PRIMARY] Insert INTO [dbo].[T_Employees] values ('Tanvi','Patel',' Physiotherapy ','Sydney') Insert INTO [dbo].[T_Employees] values ('Ashish','Patel','IT','Sydney') Insert INTO [dbo].[T_Employees] values ('Vaishu','Patel','Micro','Sydney') Insert INTO [dbo].[T_Employees] values ('Bhavik','Patel',' pediatrician ','Sydney')
Connection string:
Below is the connection string to connect to the database.
<connectionStrings> <add name="TempConnectionString" connectionString="Data Source=ASHISH;Initial Catalog=Temp;Persist Security Info=True;User ID=sa;Password=********" providerName="System.Data.SqlClient"/> </connectionStrings>
Aspx Page:
In this tutorial, there are two aspx pages.
1. Default.aspx — To implement Gridview control
2. EditEmployee.aspx –To Edit Employee
Default.aspx page:
Below HTML Markup of the page you will notice that I have placed a Script Manager and an ASP.Net Update Panel on the page. Inside the Update Panel I have placed an ASP.Net GridView Control along with brnRefreah that will be used to refresh after Edit the records in the GridView Control.
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> </asp:ScriptManager> <asp:UpdateProgress ID="UpdateProgress1" runat="server"> <ProgressTemplate> <img src="Loading.gif" alt="" /> </ProgressTemplate> </asp:UpdateProgress> <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" > <ContentTemplate> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> <Columns> <asp:TemplateField HeaderText="ID"> <ItemTemplate > <a id="popup" href='EditEmployee.aspx?id=<%# Eval("ID") %>' >edit</a> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" /> <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" /> <asp:BoundField DataField="Department" HeaderText="Department" SortExpression="Department" /> <asp:BoundField DataField="Location" HeaderText="Location" SortExpression="Location" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TempConnectionString %>" SelectCommand="SELECT Top 10 * FROM [T_Employees]"></asp:SqlDataSource> <asp:Button ID="btnRefresh" Text="refresh" runat="server" onclick="btnRefresh_Click" /> </ContentTemplate> </asp:UpdatePanel>
You notice that in gridview I have placed Edit link (line 17 in above code) to pass ID of Employee to EditEmployee page. (For example. ‘editEmployee.aspx?id=1).
Now when user click on Edit link, Dialog box will display and load EditEmployee.aspx page. To create dialog box on click event of Edit link we are going to use jQuery Dialog UI. Here is code
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.ui/1.8.6/jquery-ui.min.js"></script> <link type="text/css" rel="Stylesheet" href="http://ajax.microsoft.com/ajax/jquery.ui/1.8.6/themes/smoothness/jquery-ui.css"> <script type="text/javascript"> $(document).ready(function () { $('a#popup').live('click', function (e) { var page = $(this).attr("href") //get url of link var $dialog = $('<div></div>') .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>') .dialog({ autoOpen: false, modal: true, height: 450, width: 'auto', title: "Edit Employee", buttons: { "Close": function () { $dialog.dialog('close'); } }, close: function (event, ui) { __doPostBack('<%= btnRefresh.ClientID %>', ''); // To refresh gridview when user close dialog } }); $dialog.dialog('open'); e.preventDefault(); }); }); </script>
In dialog Close event, I use __doPostBack(‘<%= btnRefresh.ClientID %>‘, ”); to refresh Gridview. This code fire btnRefresh_click event thats why we need to place gridview1.databind() in it to refresh gridview.
Codebehide (Default.aspx.cs):
using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnRefresh_Click(object sender, EventArgs e) { GridView1.DataBind(); } }
EditEmployee.aspx Page:
In this page, we get Employee ID from Querystring. After getting Employee ID We use sql connection to get FirstName, LastName, Location and Department from Database.
EditEmployee.aspx
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <h3>Edit Employee</h3> <asp:Label ID="lblResult" runat="server" ForeColor="Green"></asp:Label> <asp:Panel ID="pnlEdit" runat="server"> <p>ID:<asp:TextBox ID="txtID" ReadOnly="true" runat="server"></asp:TextBox></p> <p> FirstName: <asp:TextBox ID="txtfName" runat="server"></asp:TextBox></p> <p> LastName:<asp:TextBox ID="txtlNmae" runat="server"></asp:TextBox></p> <p>Department: <asp:TextBox ID="txtDept" runat="server"></asp:TextBox></p> <p>Location:<asp:TextBox ID="txtLocation" runat="server"></asp:TextBox></p> <p> <asp:Button ID="btnSave" runat="server" Text="Save" onclick="btnSave_Click" /> </p> </asp:Panel> </ContentTemplate> </asp:UpdatePanel> </form>
Codebehind code: EditEmployee.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Configuration; public partial class EditPopup : System.Web.UI.Page { string CT = ConfigurationManager.ConnectionStrings["TempConnectionString"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string EID = Request.QueryString["id"]; using (SqlConnection cn = new SqlConnection(CT)) { string query = "Select * from T_Employees where ID='" + EID + "'"; using (SqlCommand cmd = new SqlCommand(query, cn)) { cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if(dr.Read() ) { txtID.Text = EID; txtfName.Text = dr["FirstName"].ToString(); txtlNmae.Text = dr["LastName"].ToString(); txtDept.Text = dr["Department"].ToString(); txtLocation.Text = dr["Location"].ToString(); } cn.Close(); cn.Dispose(); } } } } protected void btnSave_Click(object sender, EventArgs e) { ///save Employee Recoed code /// using (SqlConnection cn = new SqlConnection(CT)) { string query = "Update T_Employees Set FirstName='"+txtfName.Text+"', LastName='"+txtlNmae.Text +"', Department='"+txtDept.Text +"', Location='"+txtLocation.Text +"' where ID='" + txtID.Text + "'"; using (SqlCommand cmd = new SqlCommand(query, cn)) { cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); cn.Dispose(); lblResult.Text = "Employee Data Saved!!"; pnlEdit.Visible = false; } } } }
CSS File to style Gridview:
th { font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #4f6b72; border-right: 1px solid #C1DAD7; border-bottom: 1px solid #C1DAD7; border-top: 1px solid #C1DAD7; letter-spacing: 2px; text-transform: uppercase; text-align: left; padding: 6px 6px 6px 6px; background: #D5EDEF; } td { border-right: 1px solid #C1DAD7; border-bottom: 1px solid #C1DAD7; background: #fff; padding: 6px 6px 6px 6px; color: #4f6b72; } td.alt { background: #F5FAFA; color: #797268; } td.boldtd { font: bold 13px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; background: #D5EDEF; color: #797268; }
Download
[wpdm_file id=3]
Thanks.
Hi
Can you please tell me how to Active $(‘#hyperlinkfield’).live(‘click’, function (e)
When i’m using this Edit string in a GridView
Thank in advanced
what u mean??
Good Example……..
Hi Ashish,
Nice article!
I add animation to dialog and now I am getting all sorts of error.
– Array is undefined
– Function is undefined
it works fine in FireFox – IE 9 just keep coming back with errors.
Any ideas??
Thanks
John
Nice example…
Very informative post. It’s really helpful for me and helped me lot to complete my task.
Thanks for sharing with us. I had found another nice post over the internet which was
also explained very well about GridView Decoration in ASP.Net, for
more details of this post check out this link…
http://mindstick.com/Articles/0efe2da6-407e-4442-a675-475bd6f8a2d7/?GridView%20Decoration%20in%20ASP.Net
Thanks
Thank you for this great post. Very helpful.
Wow, incredible blog layout! How long have you been
blogging for? you made blogging look easy. The overall look of your site is
magnificent, as well as the content!
Can you show how to implement validation inside the modal dialog ?
Have a look this article http://www.ashishblog.com/blog/asp-net-form-validation-using-jquery-validation-plugin/
How are you able to use this line
using System.Collections.Generic;
its giving me build error
PLease ignore my last comment … I am talking about first line on Default.aspx page … please see using statement
Sorry for creating mess over this post ……… I wish I could delete my comments …. Please ignore my comment and delete them if possible
now i tried your code and i like the idea but my problem now the dialog is opened as normal page not box like your demo could you help me please
Ohhh after posting the comment its worked “maybe its scared :D” Thanks for your great post
Hello, Great tutorial …. i almost done .but i have one problem.when i close dialog the gridview not update … please help …..
Thanks a lot …..Ashish
there is a little error… the right value for the firs tparameter of a __doPostBack() is NOT the id of the control, is the NAME. so it’s wrong to use __doPostBack(“”, “”);
while it is right to use instead:
__doPostBack( $get(”).name, ”);
in your special case, without master pages and without user controls, it happens that id andname are the same so it works, but in general you should use the name.
great article
Thanks sir
All about…Asp.Net Gridview
Warner
this popup is taking 10 times more time to load a page than local host..
please suggest me . what i do for reduce the page loading time on server same as local host..
how to bind nested gridview using jquery
how to use rowdatabound event of gridview using jquery
How can i download the source code?
sorry don’t have full source code but if you follow this post, you don’t need source code.
Super! easy and just works. Thank You.
how can i download this article…download link is not working.
help me plz
Is there a way to close the dialog from inside the Iframe? I need to close the form using a jquery or from behind code using c#. I don’t want to use the close button that is on the Iframe. I need to build my own button and place it inside the .aspx page.
Thank you,
Sunil