Fundamentals of GridView Control
If we have data in database we can display it in Data Display controls and also
can edit it. There are couples of Data Display and Edit Controls exist in
ASP.Net but we will discuss on GridView here.
The GridView control is one of the most useful controls in ASP.NET. The GridView
control enables us to display, select, sort, page, and edit data items such as
database records.
Displaying Data
GridView control renders data items in an HTML table. Each data item is rendered
in a distinct HTML table row. For example, given code will demonstrates how we
use the GridView to display the contents of the database table.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Display
Data.aspx.vb"Inherits="Display_Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Display
Data</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"
EmptyDataText="There
are no data records to display." Width="458px">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
<asp:BoundField DataField="Contact" HeaderText="Contact"
SortExpression="Contact" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
ProviderName="<%$ ConnectionStrings:DatabaseConnectionString1.ProviderName %>"
SelectCommand="SELECT
[ID], [Name], [Address], [Contact] FROM [MyTB]">
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
In above code, the GridView control is bound to a SqlDataSource control, which
represents the database table named MyTB. The GridView is associated with its
data source through its DataSourceID property.
We can add a GridView and SqlDataSource control to a page quickly by dragging a
database table from the Database Server Explorer onto a page in Design view. It
automatically creates SqlDataSource, which retrieves all the rows and all the
columns from database table.
Programmatic Data Binding
GridView control also supports programmatic data-binding. In programmatic
data-binding it lists Generic collections. Notice that the GridView is bound to
the myinfo list in the Page_Load() method. Its DataSource property points to the
list collection, and its DataBind() method is called to load the items from the
list collection and display them.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Sub Page_Load()
'
Building list item
Dim myinfo As New List(Of String)()
myinfo.Add("1")
myinfo.Add("Abhimanyu
Kumar Vatsa")
myinfo.Add("BCA
Student")
myinfo.Add("INDIA")
'
Binding to GridView
GridView1.DataSource = myinfo
GridView1.DataBind()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Programmatic
Data Binding</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>
Selecting GridView
We can enable a user to select a particular row in a GridView control. This is
useful when we want to build single page form for huge data. We can apply some
different property to selected row to look different than other when selected.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Select
Grid View</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"
EmptyDataText="There
are no data records to display." Width="458px">
<Columns>
<asp:CommandField ShowSelectButton="True"/>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
<asp:BoundField DataField="Contact" HeaderText="Contact"
SortExpression="Contact" />
</Columns>
<SelectedRowStyle BackColor="#336699" BorderColor="Blue" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
ProviderName="<%$ ConnectionStrings:DatabaseConnectionString1.ProviderName %>"
SelectCommand="SELECT
[ID], [Name], [Address], [Contact] FROM [MyTB]">
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
We can also enable the GridView selection using the following properties:
-
SelectedDataKey: Returns the
DataKey object associated with the selected row (it is useful when there are
multiple data key).
- SelectedIndex: Returns
the index of the selected row.
- SelectedValue: Returns
the data key associated with the selected row.
- SelectedRow: Returns
the actual row that is GridViewRow object associated with the selected row.
Using Data Keys Name
We associate a value with each row in a GridView by providing a value for the
GridView control's DataKeyName property. We can assign the name of a single
database column to this property or we can assign a comma-separated list of
column names to this property.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Using
Data Keys</title>
<style type="text/css">
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="Name,Address"
AutoGenerateSelectButton="true">
<SelectedRowStyle CssClass="mycss" BackColor="#666699" BorderColor="Red">
</SelectedRowStyle>
</asp:GridView>
<br />
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
Name, Address FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Shorting Data
We can sort the rows rendered by a GridView control by enabling the AllowSorting
property.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="Name,Address"
AutoGenerateSelectButton="true"
AllowSorting="true">
<SelectedRowStyle CssClass="mycss" BackColor="#666699" BorderColor="Red">
</SelectedRowStyle>
</asp:GridView>
<br />
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
Name, Address FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Note: We
can do this manually using property 'AllowSorting' to true.
Shorting with Ajax
By default, whenever we click column header to sort the rows contained in a
GridView, the page containing the GridView is posted back to the server. When
sorting records with the GridView control, we can avoid posting the entire page
back to the server by taking advantage of AJAX (Asynchronous JavaScript and
XML).
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Using
Data Keys</title>
<style type="text/css">
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<div><b>Check
here the time while clicking to sort.</b></div>
<b><%= DateTime.Now.ToString("T") %></b>
<br />
<br />
</div>
<div>
<div>
<br />
<b>This
is with POST BACK</b>
</div>
<br />
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="Name,Address"
AutoGenerateSelectButton="true"
AllowSorting="true">
</asp:GridView>
<br />
<div>
<br />
<br />
<b>This
is without POST BACK</b>
</div>
<br />
<asp:GridView ID="GridView2"
runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="Name,Address"
EnableSortingAndPagingCallbacks="true"
AllowSorting="true">
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
Name, Address FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
This page also displays the current time at the top of the page. Notice that the
time is not updated when we sort the records in the GridView. The entire page is
not posted back to the server; only the content of the GridView control is
updated. When using AJAX with the GridView control, you cannot use
TemplateFields. Furthermore, you cannot display a Select button when AJAX is
enabled.
Using Image in Sorting
We can customize the appearance of the sort links by handling the GridView
control's RowDataBound event. This event is raised for each row rendered by the
GridView after the GridView is bound to its data source. In the example given
below I have displayed an image that represent whether a column is sorted in
ascending or descending order.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub image_RowDataBound(ByVal sender As Object, ByVal e AsGridViewRowEventArgs)
If e.Row.RowType
= DataControlRowType.Header Then
For Each cell As TableCell In e.Row.Cells
Dim sortLink As LinkButton = CType(cell.Controls(0), LinkButton)
If sortLink.Text
= GridView1.SortExpression Then
If GridView1.SortDirection
= SortDirection.Ascending Then
sortLink.Text += "
<img src='asc.GIF' title='Sort ascending' />"
Else
sortLink.Text += "
<img src='desc.GIF' title='Sort descending' />"
End If
End If
Next
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="Name,Address"
AutoGenerateSelectButton="true"
AllowSorting="true"
OnRowDataBound="image_RowDataBound">
<SelectedRowStyle
CssClass="mycss"
BackColor="#666699"
BorderColor="Red">
</SelectedRowStyle>
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
Name, Address FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Sorting based on user choice
If we need to completely customize the appearance of the sorting user interface,
then we can call the GridView control's Sort() method programmatically.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub btnSort_Click(ByVal sender As Object, ByVal e As System.EventArgs)
GridView1.Sort(ddlSort.Text, SortDirection.Ascending)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<br />
<asp:DropDownList
id="ddlSort"
Runat="server">
<asp:ListItem Text="ID" />
<asp:ListItem Text="Name" />
<asp:ListItem Text="Address" />
<asp:ListItem Text="Contact" />
</asp:DropDownList>
<asp:Button
id="btnSort"
Text="Sort"
Runat="server" onclick="btnSort_Click" />
<br />
<br />
</div>
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
AutoGenerateSelectButton="true">
<SelectedRowStyle
CssClass="mycss"
BackColor="#666699"
BorderColor="Red">
</SelectedRowStyle>
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
* FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Above code includes a DropDownList control, which we can use to sort the
contents of the GridView. When a list item is selected from the DropDownList
control and the Sort button is clicked and the btnSort_Click() method executes.
This method calls the Sort() method of the GridView control to sort the contents
of the GridView.
Note: Continue
in Next Part.
HAVE A GREAT CODING!