Paging GridView
If we have large amount of data in GridView then we need to display the rows
in different pages. We can enable paging with the GridView control by
enabling its AllowPaging property. We can also determine how many rows want
to see in one page by setting the PageSize 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"
AutoGenerateSelectButton="true"
PageSize="2"
AllowPaging="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>
Paging with AJAX
The default behavior of the GridView control is to post back to the server
each and every time we navigate to a new page of records. However, there is
an alternative of AJAX (Asynchronous JavaScript and XML) when paging through
records with the GridView control.
<%@ 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>
<br />
<br />
<%= DateTime.Now.ToString("T") %>
<br />
<br />
<b>This
is without postback to server.</b>
<br />
<br />
</div>
<asp:GridView ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
PageSize="2"
AllowPaging="true"
PagerSettings-Mode="NextPreviousFirstLast"
PagerSettings-Position="TopAndBottom"
PagerStyle-HorizontalAlign="Left"
EnableSortingAndPagingCallbacks="true"
Width="603px">
</asp:GridView>
<br />
<br />
<br />
<b>This
is with postback to server.</b>
<br />
<asp:GridView ID="GridView2"
runat="server"
DataSourceID="SqlDataSource1"
PageSize="2"
AllowPaging="true"
PagerSettings-Mode="NextPreviousFirstLast"
PagerSettings-Position="TopAndBottom"
PagerStyle-HorizontalAlign="Left"
Width="603px">
</asp:GridView>
<br />
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
* FROM MyTB">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
In above example, I have used two GridView controls but first one is with
AJAX and second one is without AJAX. I have also used some different
navigation item in above example.
Using Pager Templates
By default, when paging is enabled, the GridView renders a list of page
numbers at the bottom of the grid. We can modify the user interface for
paging through records by modifying the GridView control's PagerSettings
property. The PagerSettings class supports the following properties:
- FirstPageImageUrl Enables us to display
an image for the first page link.
- FirstPageText Enables us to specify the
text for the first page link.
- LastPageImageUrl Enables us to display an
image for the last page link.
- LastPageText Enables us to specify the
text for the last page link.
- Mode Enables us to select a display mode
for the pager user interface. Possible values are NextPrevious,
NextPreviousFirstLast, Numeric, and NumericFirstLast.
- NextPageImageUrl Enables us to display an
image for the next page link.
- NextPageText Enables us to specify the
text for the next page link.
- PageButtonCount Enables us to specify the
number of page number links to display.
- Position Enables us to specify the
position of the paging user interface. Possible values are Bottom, Top,
TopAndBottom.
- PreviousPageImageUrl Enables us to
display an image for the previous page link.
- PreviousPageText Enables us to specify
the text for the previous page link.
- Visible Enables us to hide the paging
user interface.
The PageButtonCount
requires more explanation. Imagine that we are displaying the contents of a
database table that contains 3 billion records and we are displaying two
records per page. In that case, we would need to render an overwhelming
number of page numbers. The PageButtonCount property enables we to limit the
number of page numbers displayed at once. When PageButtonCount has a value
less than the number of page numbers, the GridView renders ellipsis, which
enables a user to move between ranges of page numbers.
The GridView control includes a PagerTemplate, which enables us to
completely customize the appearance of the paging user interface. For
example, the PagerTemplate also includes two LinkButton controls, which
represent a Previous and Next link.
<%@ 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 paging_DataBound(ByVal sender As Object, ByVal e As EventArgs)
Dim menuPager As Menu = CType(GridView1.BottomPagerRow.FindControl("menuPager"),Menu)
For i As Integer =
0 To GridView1.PageCount
- 1
Dim item As New MenuItem()
item.Text = String.Format("[{0}]",
i + 1)
item.Value = i.ToString()
If GridView1.PageIndex
= i Then
item.Selected = True
End If
menuPager.Items.Add(item)
Next
End Sub
Protected Sub menuPager_MenuItemClick(ByVal sender As Object, ByVal e As MenuEventArgs)
GridView1.PageIndex = Int32.Parse(e.Item.Value)
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
.menu td
{
padding:5px 0px;
}
.selectedPage a
{
font-weight:bold;
color:red;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView
id="GridView1"
DataSourceID="SqlDataSource1"
AllowPaging="true"
PageSize="2"
Runat="server"
OnDataBound="paging_DataBound" Width="622px">
<PagerTemplate>
<table>
<tr><td>
<asp:LinkButton
id="lnkPrevious"
Text="<
Prev"
CommandName="Page"
CommandArgument="Prev"
ToolTip="Previous
Page"
Runat="server" />
</td><td>
<asp:Menu
id="menuPager"
Orientation="Vertical"
OnMenuItemClick="menuPager_MenuItemClick"
StaticSelectedStyle-CssClass="selectedPage"
CssClass="menu"
Runat="server" />
</td><td>
<asp:LinkButton
id="lnkNext"
Text="Next
>"
CommandName="Page"
CommandArgument="Next"
ToolTip="Next
Page"
Runat="server" />
</td></tr>
</table>
</PagerTemplate>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
* FROM MyTB">
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
Editing Data
The GridView control also enables us to edit database data. The amazing
thing is that we can use the GridView to edit the content of a database
table row without writing a single line of code. Here is an example which
illustrates how we can update and delete record in the database table using
GridView only.
<%@ 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>
<br /><br /><br />
<asp:GridView
ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
PageSize="2"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
DataKeyNames="ID"
AllowPaging="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"
UpdateCommand="UPDATE
MyTB SET Name=@Name, Address=@Address WHERE ID=@ID"
DeleteCommand="DELETE
MyTB WHERE ID=@ID">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Notice that the GridView control has both its AutoGenerateEditButton and
AutoGenerateDeleteButton properties enabled. When these properties are
enabled, Edit and Delete links are automatically rendered next to each row
in the GridView.
Displaying Empty Data/Searching for Data
The GridView includes two properties that enable you to display content when
no results are returned from the GridView control's data source. You can use
either the EmptyDataText property or the EmptyDataTemplate property to
handle empty data. The example given below contains a search form. If we
enter a search string that does not match the start of any name, then the
contents of the EmptyDataText property will be displayed.
<%@ 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 btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)
GridView1.Visible = True
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>
<br /><br /><br />
<b>Enter
your name to search.</b>
<br />
<asp:TextBox
id="txtName"
Runat="server" />
<asp:Button
id="btnSubmit"
Text="Search"
OnClick="btnSubmit_Click"
Runat="server" />
<hr />
<asp:GridView
id="GridView1"
DataSourceID="SqlDataSource1"
EmptyDataText="<img
src='sad.GIF'/> No Matching Data!"
Visible="false"
Runat="server" />
<br />
<asp:SqlDataSource
id="SqlDataSource1"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
iD, Name, Address, Contact FROM MyTB WHERE Name LIKE +'%'+ @Name+'%'"
Runat="server">
<SelectParameters>
<asp:ControlParameter
Name="Name"
ControlID="txtName"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Formatted GridView Look
The GridView control includes a rich set of formatting properties that you
can use to modify its appearance. I recommend that you don't use most of
these properties because using these properties results in bloated pages.
Instead, I recommend that you use Cascading Style Sheets to format the
GridView control.
The GridView control includes a CssClass property. The control also exposes
several Style objects that include the CssClass property:
- AlternatingRowStyle Enables you to format
every other row.
- FooterStyle Enables you to format the
footer row.
- HeaderStyle Enables you to format the
header row.
- PagerStyle Enables you to format the
pager row.
- RowStyle Enables you to format each row.
- SelectedRowStyle Enables you to format
the selected row.
<%@ 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>
<br /><br /><br />
<asp:GridView
ID="GridView1"
runat="server"
DataSourceID="SqlDataSource1"
PageSize="2"
AllowPaging="True" BackColor="#DEBA84" BorderColor="#DEBA84"
BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
Width="683px">
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FFF1D4" />
<SortedAscendingHeaderStyle BackColor="#B95C30" />
<SortedDescendingCellStyle BackColor="#F1E5CE" />
<SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>"
SelectCommand="SELECT
* FROM MyTB"
UpdateCommand="UPDATE
MyTB SET Name=@Name, Address=@Address WHERE ID=@ID"
DeleteCommand="DELETE
MyTB WHERE ID=@ID">
</asp:SqlDataSource>
<br />
</div>
</form>
</body>
</html>
Note: Continue
in Next Part.
HAVE A GREAT CODING!