Using jQuery to Display GridView Row Details in Modal Popup
(Show GridView Row Details in Modal Popup using jQuery) – Có rất nhiều cách để tạo Master Detail như sử dụng Twitter Bootstrap, AJAX ModalPopupExtender… Bài viết dưới đây sẽ hướng dẫn các bạn cách xây dựng chức năng Master Detail sử dụng jQuery trong Gridview. Trong danh sách là toàn bộ danh sách đơn hàng và khi kích vào nút Detail danh sách các sản phẩm trong đơn hàng đó sẽ xuất hiện.
- B1: Download CSDL Northwind tại đây và thực hiện công việc Restore Data.
- B1: Download CSDL Northwind tại đây và thực hiện công việc Restore Data.
- B2: Tạo Project trong Microsoft Visual Studio 2010
Trong Visual Studio tạo 1 Class có tên: Utility và nhập đoạn Code phía dưới cho Class này.
C# Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
namespace UsingjQueryDisplayGridViewRowDetails
{
public class SqlDataProvider
{
#region "Membres Prives"
private string _connectionString;
#endregion
#region "Constructeurs"
public SqlDataProvider()
{
try
{
_connectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
}
catch
{
}
}
#endregion
#region "Proprietes"
public string ConnectionString
{
get { return _connectionString; }
}
#endregion
#region "Functions"
public DataTable FillTable(string sql)
{
try
{
DataTable tb = new DataTable();
SqlDataAdapter adap = new SqlDataAdapter(sql, _connectionString);
adap.Fill(tb);
return tb;
}
catch
{
return null;
}
}
#endregion
}
}
VB.NET Code
Imports System.Data.SqlClient
Imports System.Data
Namespace UsingjQueryDisplayGridViewRowDetails
Public Class SqlDataProvider
#Region "Membres Prives"
Shared _IsError As Boolean = False
Private _connectionString As String
#End Region
#Region "Constructeurs"
Public Sub New()
Try
_connectionString = ConfigurationManager.ConnectionStrings("SiteSqlServer").ConnectionString
_IsError = False
Catch ex As Exception
_IsError = True
End Try
End Sub
#End Region
#Region "Proprietes"
Public ReadOnly Property ConnectionString() As String
Get
Return _connectionString
End Get
End Property
#End Region
#Region "Functions"
Public Function FillTable(ByVal sql As String) As DataTable
Try
Dim tb As New DataTable
Dim adap As New SqlDataAdapter(sql, _connectionString)
adap.Fill(tb)
Return tb
Catch ex As Exception
Return Nothing
End Try
End Function
#End Region
End Class
Chú ý: Thuộc tính SiteSqlServer chính là chuỗi Connect với SQL Server trong file Web.Config
- B3: Tạo thư mục UserControls và thêm file Popup_OrderDetails.ascx, mở file dưới dạng HTML và nhập thông tin phía dưới.
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Popup_OrderDetails.ascx.cs" Inherits="UsingBootstrapDisplayGridViewRowDetails.UserControls.Popup_OrderDetails" %>
<table width="100%" cellpadding="2" cellspacing="3">
<tr>
<td>
<asp:Label ID="lblItemID" Visible="false" runat="server"/>
</td>
</tr>
<tr>
<td>
<asp:GridView ID="grvObject" runat="server" AllowPaging="true" PageSize="8"
CssClass="GridStyle" BorderColor="#cbcbcb" BorderStyle="solid"
BorderWidth="1" AutoGenerateColumns="false" width="100%">
<AlternatingRowStyle CssClass="GridStyle_AltRowStyle" />
<HeaderStyle CssClass="GridStyle_HeaderStyle" />
<RowStyle CssClass="GridStyle_RowStyle" />
<pagerstyle cssclass="GridStyle_pagination" />
<Columns>
<asp:TemplateField HeaderText="ProductName">
<ItemStyle width="25%" />
<ItemTemplate>
<asp:Label ID="lblProductName" Text='<%# Eval("ProductName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CategoryName">
<ItemStyle width="25%" />
<ItemTemplate>
<asp:Label ID="lblCategoryName" Text='<%# Eval("CategoryName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UnitPrice">
<ItemStyle HorizontalAlign="Right" width="10%" />
<ItemTemplate>
<asp:Label ID="lblUnitPrice" Text='<%# Eval("UnitPrice") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<ItemStyle HorizontalAlign="Right" width="8%" />
<ItemTemplate>
<asp:Label ID="lblQuantity" Text='<%# Eval("Quantity") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Discount">
<ItemStyle HorizontalAlign="Right" width="8%" />
<ItemTemplate>
<asp:Label ID="lblDiscount" Text='<%# Eval("Discount") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
C# Code
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
namespace UsingBootstrapDisplayGridViewRowDetails.UserControls
{
partial class Popup_OrderDetails : System.Web.UI.UserControl
{
#region "Private Members"
private int ItemID;
#endregion
#region "Bind Data"
public void BindOrderDetail(int ItemID)
{
DataTable objBind = new DataTable();
objBind = BindData(ItemID);
if (ItemID != -1)
{
lblItemID.Text = ItemID.ToString();
}
if (objBind != null)
{
if (objBind.Rows.Count > 0)
{
grvObject.DataSource = objBind;
grvObject.DataBind();
grvObject.Visible = true;
}
else
{
grvObject.Visible = false;
}
}
}
private DataTable BindData(int ItemID)
{
SqlDataProvider objSQL = new SqlDataProvider();
DataTable objBind = objSQL.FillTable("SELECT [Order Details].ProductID, Products.ProductName, Products.CategoryID, Categories.CategoryName, [Order Details].UnitPrice,[Order Details].Quantity, [Order Details].Discount" + " FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID" + " Where [Order Details].OrderID=" + ItemID);
return objBind;
}
#endregion
#region "GridView Methods"
private void grvObject_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e)
{
grvObject.PageIndex = e.NewPageIndex;
if (!string.IsNullOrEmpty(lblItemID.Text))
{
ItemID =Convert.ToInt32(lblItemID.Text);
}
BindOrderDetail(ItemID);
}
#endregion
}
}
VB.NET Code
Namespace UsingBootstrapDisplayGridViewRowDetails.UserControls
Partial Class Popup_OrderDetails
Inherits System.Web.UI.UserControl
#Region "Private Members"
Private ItemID As Integer
#End Region
#Region "Bind Data"
Public Sub BindOrderDetail(ByVal ItemID As Integer)
Dim objBind As New DataTable
objBind = BindData(ItemID)
If ItemID <> -1 Then
lblItemID.Text = ItemID
End If
If Not objBind Is Nothing Then
If objBind.Rows.Count > 0 Then
grvObject.DataSource = objBind
grvObject.DataBind()
grvObject.Visible = True
Else
grvObject.Visible = False
End If
End If
End Sub
Private Function BindData(ByVal ItemID As Integer) As DataTable
Dim objSQL As New SqlDataProvider
Dim objBind As DataTable = objSQL.FillTable("SELECT [Order Details].ProductID, Products.ProductName, Products.CategoryID, Categories.CategoryName, [Order Details].UnitPrice,[Order Details].Quantity, [Order Details].Discount" & _
" FROM Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID" & _
" Where [Order Details].OrderID=" & ItemID)
Return objBind
End Function
#End Region
#Region "GridView Methods"
Private Sub grvObject_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles grvObject.PageIndexChanging
grvObject.PageIndex = e.NewPageIndex
If lblItemID.Text <> "" Then
ItemID = lblItemID.Text
End If
BindOrderDetail(ItemID)
End Sub
#End Region
End Class
<head id="Head1" runat="server">
<title>Using jQuery to Display GridView Row Details in Modal
Popup</title>
<link href="~/Styles/Site.css"
rel="stylesheet"
type="text/css"
/>
<link href="Styles/GridStyle.css"
rel="stylesheet"
type="text/css"
/>
<link href="Styles/bootstrap.css"
rel="stylesheet"
type="text/css"
/>
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<link href="http://code.jquery.com/ui/1.11.4/themes/ui-lightness/jquery-ui.css"
rel="stylesheet"
type="text/css"/>
<script type="text/javascript"
src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript"
src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<asp:ContentPlaceHolder
ID="HeadContent"
runat="server">
</asp:ContentPlaceHolder>
</head>
- B6: Mở file Default.aspx dưới dạng HTML và nhập mã HTML
C# Code
<%@ Page
Title="Using
jQuery to Display GridView Row Details in Modal Popup" Language="C#"
MasterPageFile="~/Site.master"
AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="UsingjQueryDisplayGridViewRowDetails._Default"
%>
<%@ Register
TagPrefix="ModalPopup"
TagName="ListRecord"
Src="~/UserControls/Popup_OrderDetails.ascx"%>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1"
runat="server">
</asp:ScriptManager>
<div class="panel
panel-default">
<div class="panel-heading">
<h3>Using jQuery to Display GridView Row Details in
Modal Popup</h3>
</div>
<div class="panel-body">
<asp:UpdatePanel ID="updatePanel"
runat="server"
UpdateMode="Conditional">
<ContentTemplate>
<table
cellpadding="2"
cellspacing="3"
width="100%">
<tr id="trMessage" runat="server" visible="false">
<td colspan="2">
<asp:Label ID="lblMessage"
runat="server"
Text="No
Data"></asp:Label>
</td>
</tr>
<tr>
<td colspan="2">
<asp:GridView ID="grvObject"
runat="server"
AllowPaging="true"
PageSize="10"
CssClass="GridStyle"
BorderColor="#cbcbcb"
BorderStyle="solid"
OnRowCommand="grvObject_RowCommand"
OnPageIndexChanging="grvObject_PageIndexChanging"
BorderWidth="1"
AutoGenerateColumns="false"
DataKeyNames="OrderID"
width="100%">
<AlternatingRowStyle CssClass="GridStyle_AltRowStyle" />
<HeaderStyle CssClass="GridStyle_HeaderStyle"
/>
<RowStyle CssClass="GridStyle_RowStyle"
/>
<pagerstyle cssclass="GridStyle_pagination"
/>
<Columns>
<asp:TemplateField HeaderText="OrderDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblOrderDate"
runat="server"
Text='<%# ((Eval("OrderDate") is DateTime) ?
((DateTime)Eval("OrderDate")).ToShortDateString() :
Eval("OrderDate")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="RequiredDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblRequiredDate"
runat="server"
Text='<%# ((Eval("RequiredDate") is DateTime) ?
((DateTime)Eval("RequiredDate")).ToShortDateString() :
Eval("RequiredDate")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShippedDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblShippedDate"
runat="server"
Text='<%# ((Eval("ShippedDate") is DateTime) ?
((DateTime)Eval("ShippedDate")).ToShortDateString() :
Eval("ShippedDate")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShipName">
<ItemStyle width="15%" />
<ItemTemplate>
<asp:Label ID="lblShipName"
Text='<%# Eval("ShipName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShipAddress">
<ItemStyle width="22%" />
<ItemTemplate>
<asp:Label ID="lblShipAddress" Text='<%# Eval("ShipAddress") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemStyle HorizontalAlign="Center"
width="2%"
/>
<ItemTemplate>
<asp:LinkButton id="cmdDetail"
runat="server"
CssClass="btn
btn-info" CausesValidation="False" CommandName="detail" CommandArgument='<%# Eval("OrderID") %>' text="Detail"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1"
runat="server">
<ProgressTemplate>
<img
src=""
alt="Loading..."/>
</ProgressTemplate>
</asp:UpdateProgress>
<div id="detail">
<asp:UpdatePanel ID="UpdatePanel2"
runat="server">
<ContentTemplate>
<ModalPopup:ListRecord ID="ucOrderDetails"
runat="server"
/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="grvObject" EventName="RowCommand" />
</Triggers>
</asp:UpdatePanel>
</div>
</div>
</div>
</asp:Content>
VB.NET Code
<%@ Page
Title="Using
jQuery to Display GridView Row Details in Modal Popup" Language="vb"
MasterPageFile="~/Site.Master"
AutoEventWireup="false"
CodeBehind="Default.aspx.vb"
Inherits="UsingjQueryDisplayGridViewRowDetails._Default"
%>
<%@ Register
TagPrefix="ModalPopup"
TagName="ListRecord"
Src="~/UserControls/Popup_OrderDetails.ascx"%>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1"
runat="server">
</asp:ScriptManager>
<div class="panel
panel-default">
<div class="panel-heading">
<h3>Using jQuery to Display GridView Row Details in
Modal Popup</h3>
</div>
<div class="panel-body">
<asp:UpdatePanel ID="updatePanel"
runat="server"
UpdateMode="Conditional">
<ContentTemplate>
<table
cellpadding="2"
cellspacing="3"
width="100%">
<tr id="trMessage" runat="server" visible="false">
<td colspan="2">
<asp:Label ID="lblMessage"
runat="server"
Text="No
Data"></asp:Label>
</td>
</tr>
<tr>
<td colspan="2">
<asp:GridView ID="grvObject"
runat="server"
AllowPaging="true"
PageSize="10"
CssClass="GridStyle"
BorderColor="#cbcbcb"
BorderStyle="solid"
BorderWidth="1"
AutoGenerateColumns="false"
DataKeyNames="OrderID"
width="100%">
<AlternatingRowStyle CssClass="GridStyle_AltRowStyle" />
<HeaderStyle CssClass="GridStyle_HeaderStyle"
/>
<RowStyle CssClass="GridStyle_RowStyle"
/>
<pagerstyle cssclass="GridStyle_pagination" />
<Columns>
<asp:TemplateField HeaderText="OrderDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblOrderDate"
Text='<%# Eval("OrderDate").ToShortDateString %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="RequiredDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblRequiredDate"
Text='<%# Eval("RequiredDate").ToShortDateString %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShippedDate">
<ItemStyle HorizontalAlign="Center"
width="8%"
/>
<ItemTemplate>
<asp:Label ID="lblShippedDate"
Text='<%# Eval("ShippedDate").ToShortDateString %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShipName">
<ItemStyle width="15%" />
<ItemTemplate>
<asp:Label ID="lblShipName"
Text='<%# Eval("ShipName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ShipAddress">
<ItemStyle width="22%" />
<ItemTemplate>
<asp:Label ID="lblShipAddress"
Text='<%# Eval("ShipAddress") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemStyle HorizontalAlign="Center"
width="2%"
/>
<ItemTemplate>
<asp:LinkButton id="cmdDetail"
runat="server"
CssClass="btn
btn-info" CausesValidation="False" CommandName="detail" CommandArgument='<%# Eval("OrderID") %>' text="Detail"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1"
runat="server">
<ProgressTemplate>
<img
src=""
alt="Loading..."/>
</ProgressTemplate>
</asp:UpdateProgress>
<div id="detail">
<asp:UpdatePanel ID="UpdatePanel2"
runat="server">
<ContentTemplate>
<ModalPopup:ListRecord ID="ucOrderDetails"
runat="server"
/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="grvObject" EventName="RowCommand" />
</Triggers>
</asp:UpdatePanel>
</div>
</div>
</div>
</asp:Content>- B7: Viết Code cho file Default.aspx
C# Code
//Visit http://www.laptrinhdotnet.com
for more ASP.NET Tutorials
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace UsingjQueryDisplayGridViewRowDetails
{
public partial class _Default :
System.Web.UI.Page
{
#region
"Bind Data"
private void
BindOrder()
{
DataTable objBind = new
DataTable();
objBind = BindData();
if (objBind != null)
{
if (objBind.Rows.Count > 0)
{
grvObject.DataSource = objBind;
grvObject.DataBind();
trMessage.Visible = false;
grvObject.Visible = true;
updatePanel.Update();
}
else
{
trMessage.Visible = true;
grvObject.Visible = false;
}
}
}
private DataTable
BindData()
{
SqlDataProvider objSQL = new
SqlDataProvider();
DataTable objBind = objSQL.FillTable("Select Orders.* From Orders");
return objBind;
}
#endregion
#region
"GridView Methods"
protected void
grvObject_RowCommand(object sender,
System.Web.UI.WebControls.GridViewCommandEventArgs
e)
{
int ItemID = Convert.ToInt32(e.CommandArgument);
switch (e.CommandName.ToLower())
{
case "detail":
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script
type='text/javascript'>");
sb.Append(" $(\"#detail\").dialog({");
sb.Append(" title: \"jQuery Show Gridview Row
Details in Popup\",");
sb.Append(" width: 650,");
sb.Append(" modal: true,");
sb.Append(" buttons: {");
sb.Append(" Close: function () {");
sb.Append(" $(this).dialog('close');");
sb.Append(" }");
sb.Append(" }});");
sb.Append("</script>");
var ucDetails =
(UsingjQueryDisplayGridViewRowDetails.UserControls.Popup_OrderDetails)ucOrderDetails;
ucDetails.BindOrderDetail(ItemID);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(),
"ModalScript", sb.ToString(), false);
break;
}
}
protected void grvObject_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e)
{
grvObject.PageIndex = e.NewPageIndex;
BindOrder();
}
#endregion
#region
"Event Handles"
protected void
Page_Load(object sender, System.EventArgs e)
{
try
{
if (!IsPostBack)
{
BindOrder();
}
}
catch
{
}
}
#endregion
}
}
VB.NET Code
'Visit http://www.laptrinhdotnet.com
for more ASP.NET Tutorials
Namespace UsingjQueryDisplayGridViewRowDetails
Public Class _Default
Inherits System.Web.UI.Page
#Region "Bind Data"
Private Sub
BindOrder()
Dim objBind As New DataTable
objBind = BindData()
If Not objBind Is Nothing Then
If objBind.Rows.Count > 0 Then
grvObject.DataSource = objBind
grvObject.DataBind()
trMessage.Visible = False
grvObject.Visible = True
updatePanel.Update()
Else
trMessage.Visible = True
grvObject.Visible = False
End If
End If
End Sub
Private Function
BindData() As DataTable
Dim objSQL As New SqlDataProvider
Dim objBind As DataTable = objSQL.FillTable("Select Orders.* From Orders")
Return objBind
End Function
#End Region
#Region "GridView
Methods"
Private Sub
grvObject_RowCommand(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewCommandEventArgs)
Handles grvObject.RowCommand
Dim ItemID As Integer = Integer.Parse(e.CommandArgument)
Select Case
e.CommandName.ToLower
Case "detail"
Dim sb As
New System.Text.StringBuilder()
sb.Append("<script
type='text/javascript'>")
sb.Append("
$(""#detail"").dialog({")
sb.Append(" title: ""jQuery Show Gridview
Row Details in Popup"",")
sb.Append(" width: 650,")
sb.Append(" modal: true,")
sb.Append(" buttons: {")
sb.Append(" Close: function () {")
sb.Append(" $(this).dialog('close');")
sb.Append(" }")
sb.Append(" }});")
sb.Append("</script>")
With CType(ucOrderDetails,
UsingjQueryDisplayGridViewRowDetails.UserControls.Popup_OrderDetails)
.BindOrderDetail(ItemID)
End With
ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "ModalScript", sb.ToString(), False)
End Select
End Sub
Private Sub
grvObject_PageIndexChanging(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewPageEventArgs)
Handles grvObject.PageIndexChanging
grvObject.PageIndex = e.NewPageIndex
BindOrder()
End Sub
#End Region
#Region "Event
Handles"
Protected Sub
Page_Load(ByVal sender As
Object, ByVal e
As System.EventArgs)
Handles Me.Load
Try
If Page.IsPostBack = False Then
BindOrder()
End If
Catch ex As Exception
End Try
End Sub
#End Region
End Class
Chúc các bạn thành công!
Quang Bình
No Comment to " Using jQuery to Display GridView Row Details in Modal Popup "