How To Perform Paging with the DataGrid Windows Control by Using Visual C# .NET
When you page a DataGrid, you display data in page-size "chunks," that is, one page of records at a time. The sample code to follow copies the DataRow objects for each page from the DataSet in memory to a temporary table. The temporary table is then bound to the DataGrid control.
1. Open a new Visual C# .NET Windows Application project.
2. Add DataGrid control, and set its ReadOnly property to True.
3. Place the following additional controls on Form1, and set their properties as shown below:
Collapse this tableExpand this table
Control Name Property Text Property
Button btnFirstPage First Page
Button btnNextPage Next Page
TextBox txtDisplayPageNo
Button btnPreviousPage Previous Page
Button btnLastPage Last Page
TextBox txtPageSize 5
Button btnFillGrid Fill Grid
DataGrid dataGrid1
4. Copy and paste the following code into the top of Form1's Code window. Make sure that each namespace is referenced just once. System and System.Data may already be referenced by default.
using System;
using System.Data;
using System.Data.SqlClient;
5. Copy and paste the following code at the top of public class Form1 to declare form-level variables for Form1:
SqlDataAdapter da;
DataSet ds;
DataTable dtSource;
int PageCount;
int maxRec;
int pageSize;
int currentPage;
int recNo;
6. Copy and paste the following code immediately after the static void Main method so that this code is form-level in scope:
private void LoadPage()
{
int i;
int startRec;
int endRec;
DataTable dtTemp;
//Clone the source table to create a temporary table.
dtTemp = dtSource.Clone();
if (currentPage == PageCount)
{
endRec = maxRec;
}
else
{
endRec = pageSize * currentPage;
}
startRec = recNo;
//Copy rows from the source table to fill the temporary table.
for (i = startRec; i < endRec; i++) {
dtTemp.ImportRow(dtSource.Rows[i]);
recNo += 1;
}
dataGrid1.DataSource = dtTemp;
DisplayPageInfo();
}
private void DisplayPageInfo()
{
txtDisplayPageNo.Text = "Page " + currentPage.ToString() + "/ " + PageCount.ToString();
}
private bool CheckFillButton()
{
// Check if the user clicks the "Fill Grid" button.
if (pageSize == 0)
{
MessageBox.Show("Set the Page Size, and then click the Fill Grid button!");
return false;
}
else
{
return true;
}
}
7. Paste the following code into the Form1_Load event procedure:
//Open Connection.
SqlConnection conn = new SqlConnection("Server=server;uid=login;pwd=pwd;database=northwind");
//Set the DataAdapter's query.
da = new SqlDataAdapter("select * from customers", conn);
ds = new DataSet();
//Fill the DataSet.
da.Fill(ds, "customers");
//Set the source table.
dtSource = ds.Tables["customers"];
8. Modify the connection string, which appears in the preceding code, as appropriate for your environment:
SqlConnection conn = new SqlConnection("Server=server;uid=login;pwd=pwd;database=northwind");
9. Double-click Fill Grid to open the code window for btnFillGrid. Copy and paste the following code into the btnFillGrid_Click event procedure:
// Set the start and max records.
pageSize = Convert.ToInt32(txtPageSize.Text);
maxRec = dtSource.Rows.Count;
PageCount = maxRec / pageSize;
//Adjust the page number if the last page contains a partial page.
if ((maxRec % pageSize) > 0) {
PageCount += 1;
}
// Initial seeings
currentPage = 1;
recNo = 0;
// Display the content of the current page.
LoadPage();
10. Double-click First Page to open the code window for btnFirstPage. Copy and paste the following code into the btnFirstPage_Click event procedure:
if (CheckFillButton() == false) {
return;
}
//Check if you are already at the first page.
if (currentPage == 1) {
MessageBox.Show("You are at the First Page!");
return;
}
currentPage = 1;
recNo = 0;
LoadPage();
11. Double-click Next Page to open the code window for btnNextPage. Copy and paste the following code into the btnNextPage_Click event procedure:
//If the user did not click the "Fill Grid" button, then return.
if (CheckFillButton() == false) {
return;
}
//Check if the user clicks the "Fill Grid" button.
if (pageSize == 0) {
MessageBox.Show("Set the Page Size, and then click the Fill Grid button!");
return;
}
currentPage += 1;
if (currentPage > PageCount) {
currentPage = PageCount;
//Check if you are already at the last page.
if (recNo == maxRec) {
MessageBox.Show("You are at the Last Page!");
return;
}
}
LoadPage();
12. Double-click Previous Page to open the code window for btnPreviousPage. Copy and paste the following code into the btnPreviousPage_Click event procedure:
if (CheckFillButton() == false) {
return;
}
if (currentPage == PageCount) {
recNo = pageSize * (currentPage - 2);
}
currentPage -= 1;
//Check if you are already at the first page.
if (currentPage < 1) {
MessageBox.Show("You are at the First Page!");
currentPage = 1;
return;
}
else {
recNo = pageSize * (currentPage - 1);
}
LoadPage();
13. Double-click Last Page to open the code window for btnLastPage. Copy and paste the following code into the btnLastPage_Click event procedure:
if (CheckFillButton() == false) {
return;
}
//Check if you are already at the last page.
if (recNo == maxRec) {
MessageBox.Show("You are at the Last Page!");
return;
}
currentPage = PageCount;
recNo = pageSize * (currentPage - 1);
LoadPage();
14. Press the F5 key to build and run the project.
15. By default, the Page Size is set to 5 records. You can change this in the text box.
16. Click Fill Grid. Notice that the DataGrid is filled with 5 records.
17. Click First Page, Next Page, Previous Page, and Last Page to browse between pages.
Labels: DataGrid
