0

افزودن پیمایش مستقیم صفحه به دیتاگرید

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

افزودن پیمایش مستقیم صفحه به دیتاگرید

تصور کنید که میخواهید با استفاده از دیتاگرید اطلاعاتی را به صورت صفحه بندی شده نمایش دهید و به کاربر این امکان را نیز بدهید که بتواند مستقیما به آن صفحه ای که میخواهد برود.
برای نمایش داده ها به صورت صفحه بندی شده شما میتوانید از یک کنترل دیتاگرید با چنین ویژگی‌هایی استفاده کنید:

PagerStyle-Mode="NumericPages"
PagerStyle-PageButtonCount="5"

و خروجی چنین خواهد بود:
 
اما تصور کنید که بخواهیم خروجی ما چیزی شبیه به این باشد:
 
یعنی کاربر عدد صفحه مورد نظر را به صورت دستی وارد کند و مستقیما به صفه مورد نظر خود برود. این کار برای زمانی که تعداد صفحات دیتاگرید مورد نظر زیاد شود کاربرد خواهد داشت.
چنانچه بخواهیم این مرورد را پیاده سازی کنیم ابتدا از ویژگی هایی زیر استفاده میکنیم:

AllowPaging="True"
PageSize="5"
PagerStyle-Visible="False"

همانطور که میبینید در اینجا دیگر اجازه نداده‌ایم تا اعداد صفحات در زیر دیتاگرید نمایش پیدا کنند.


عمل صفحه بندی در این مثال را با استفاده از یک دکمه ( button ) برای انتقال به صفحه مورد نظر، یک برچسب ( label ) برای نمایش شماره صفحه فعلی و مکان وارد کردن عدد صفحه و یک جعبه متنی یا TextBox برای دریافت کردن عدد صفحه انجام میدهیم.


در اینجا نیاز به کدی داریم که طبق آن دیتاگرید مورد نظر را به داده ها مقید کنیم. همچنین با استفاده از کد زیر میباید شماره صفحه فعلی را دریافت کرده و آن را درون برچسب نمایش دهیم:

lblPager.Text = "Displaying Page " + Convert.ToString(dgBooks.CurrentPageIndex + 1) +" of " + Convert.ToString(dgBooks.PageCount) +", Enter Desired Page Number:";

متد btnDisplayPage_Click که کاربر پس از کلیلک کردن دکمه وارد میکند به شرح زیر است:

protected void btnDisplayPage_Click(Object sender,System.EventArgs e)
{
// set new page index and rebind the data
// NOTE: The page numbers used by the datagrid control are 0 based
// so adjust the user enter page number to be 0 based
dgBooks.CurrentPageIndex = Convert.ToInt32(txtNewPageNumber.Text) - 1;
bindData();
}

همانگونه که میبنیید در این متد ابتدا عدد وارد شده در جعبه متنی را دریافت کرده و از آنجایی که محتوای جعبه متنی یک رشته است، آن را با استفاده از کلاس convert به عدد صحیح تبدیل میکنیم.


سپس از آنجایی که شماره صفحات در دیتاگرید از صفر شروع میشود از این عدد یک واحد کم میکنیم. عدد حاصل آن چیزی است که باید بعنوان شماره صفحه قرار گیرد.


کد این صفحه چنین خواهد بود :

<%@ Page Language="C#" AutoEventWireup="false"
CodeFile="CH02DatagridWithDirectPageNavVB2.aspx.vb"
Inherits="ASPNetCookbook.VBExamples.CH02DatagridWithDirectPageNavVB2"
Title="DataGrid With Direct Page Navigation 2" %>
<asp:Content ID="pageBody" Runat="server" ContentPlaceHolderID="PageBody">
<div align="center" class="pageHeading">
DataGrid Using Custom Direct Page Navigation (VB)
</div>
<asp:DataGrid ID="dgBooks" Runat="server"
BorderColor="#000080" BorderWidth="2px"
AutoGenerateColumns="False"
Width="90%"
HorizontalAlign="center"
AllowPaging="True"
PageSize="5"
PagerStyle-Visible="False">
<HeaderStyle HorizontalAlign="Center" CssClass="tableHeader" />
<ItemStyle CssClass="tableCellNormal" />
<AlternatingItemStyle CssClass="tableCellAlternating" />
<Columns>
<asp:BoundColumn HeaderText="Title"
DataField="Title" />
<asp:BoundColumn HeaderText="ISBN"
DataField="ISBN"
ItemStyle-HorizontalAlign="Center" />
<asp:BoundColumn HeaderText="Publisher"
DataField="Publisher"
ItemStyle-HorizontalAlign="Center" />
</Columns>
</asp:DataGrid>
<br />
<table width="70%" border="0" align="center">
<tr>
<td>
<asp:Label ID="lblPager" Runat="server" CssClass="pagerText" />
</td>
<td>
<asp:TextBox ID="txtNewPageNumber" Runat="server" Width="40" />
</td>
<td>
<asp:Button ID="btnDisplayPage" Runat="server"
Text="Update" OnClick="btnDisplayPage_Click" />
</td>
</tr>
</table>
</asp:Content>

کد پشت صفحه نیز چنین است:

using System;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Web.UI.WebControls;
namespace ASPNetCookbook.CSExamples
{
///*******************************************************************
/// <summary>
/// This class provides the code behind for
/// CH02DatagridWithDirectPageNavCS2.aspx
/// </summary>
public partial class CH02DatagridWithDirectPageNavCS2 : System.Web.UI.Page
{
///****************************************************************
/// <summary>
/// This routine provides the event handler for the page load event.
/// It is responsible for initializing the controls on the page.
/// </summary>
///
/// <param name="sender">Set to the sender of the event</param>
/// <param name="e">Set to the event arguments</param>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
bindData();
}
} // Page_Load
///****************************************************************
/// <summary>
/// This routine provides the event handler for the display page button
/// click event of the datagrid. It is responsible for setting the page
/// index to the entered page and rebinding the data.
/// </summary>
///
/// <param name="sender">Set to the sender of the event</param>
/// <param name="e">Set to the event arguments</param>
protected void btnDisplayPage_Click(Object sender,
System.EventArgs e)
{
// set new page index and rebind the data
// NOTE: The page numbers used by the datagrid control are 0 based
// so adjust the user enter page number to be 0 based
dgBooks.CurrentPageIndex = Convert.ToInt32(txtNewPageNumber.Text) - 1;
bindData();
} // btnDisplayPage_Click
///****************************************************************
/// <summary>
/// This routine queries the database for the data to displayed and binds
/// it to the datagrid
/// </summary>
private void bindData()
{
OleDbConnection dbConn = null;
OleDbDataAdapter da = null;
DataSet dSet = null;
String strConnection;
String strSQL;
try
{
// get the connection string from web.config and open a connection
// to the database
strConnection = ConfigurationManager.
ConnectionStrings["dbConnectionString"].ConnectionString;
dbConn = new OleDbConnection(strConnection);
dbConn.Open();
// build the query string and get the data from the database
strSQL = "SELECT Title, ISBN, Publisher " +
"FROM Book " +
"ORDER BY Title";
da = new OleDbDataAdapter(strSQL, dbConn);
dSet = new DataSet();
da.Fill(dSet);
// set the source of the data for the datagrid control and bind it
dgBooks.DataSource = dSet;
dgBooks.DataBind();
//update label on custom pager to show current page and total pages
lblPager.Text = "Displaying Page " +
Convert.ToString(dgBooks.CurrentPageIndex + 1) +
" of " + Convert.ToString(dgBooks.PageCount) +
", Enter Desired Page Number:";
}
finally
{
// cleanup
if (dbConn != null)
{
dbConn.Close();
}
}
} // bindData
} // CH02DatagridWithDirectPageNavCS2
}

چهارشنبه 10 آذر 1389  5:13 AM
تشکرات از این پست
دسترسی سریع به انجمن ها