dabirsiaghi
جمعه 02 فروردین 1392, 17:31 عصر
خوب داستان که مشخصه اگر از گرید ویو به حالت طبیعی استفاده کنید کل دیتا را می آورد و بعد صفحه بندی میکند
برای حل این مشکل دو راه وجود دارد :
1- استفاده از Object datasource
2-سفارشی کردن گرید
البته نوع خواند از دیتابیس هم مهم نیست ممکنه EF ,Ado.net و... باشه
فعلن راه دوم رو میگم که یه ذره سخت تره
public class MyGridView : GridView
{
public bool HideEmptyDataText { get; set; }
public MyGridView()
{
if (!HideEmptyDataText)
this.EmptyDataText = "ركورد اطلاعاتي موجود نيست";
else
this.EmptyDataText = "";
this.AutoGenerateColumns = false;
}
public int CurrentPageIndex { get { return int.Parse(ddlPage.SelectedValue); } set { ddlPage.SelectedValue = value.ToString(); } }
public int CurrentRowNumber { get { return int.Parse(ddlRowsNumber.SelectedValue); } set { ddlRowsNumber.SelectedValue = value.ToString(); } }
DropDownList ddlPage = new DropDownList();
DropDownList ddlRowsNumber = new DropDownList();
Button btnFirst = new Button();
Button btnPrevious = new Button();
Button btnNext = new Button();
Button btnLast = new Button();
Label lblPager = new Label();
Label lblRowsNumber = new Label();
Label lblPageInformation = new Label();
Label lblRowInformation = new Label();
public int AllRecordCount { get; set; }
public delegate void GoPageClickedHandler(int PageIndex, int RowNumber, object sender);
public event GoPageClickedHandler OnGoPageClicked;
public delegate void PageChangedHandler(int PageIndex, int RowNumber, object sender);
public event PageChangedHandler OnPageChanged;
public delegate void RowsNumberChangedHandler(int PageIndex, int RowNumber, object sender);
public event RowsNumberChangedHandler OnRowsNumberChanged;
protected override void OnRowCreated(GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer)
{
if (Rows.Count > 0)
{
int cellse = e.Row.Cells.Count;
for (int i = cellse - 1; i >= 1; i--)
{
e.Row.Cells[i].Visible = false;
}
e.Row.Cells[0].ColumnSpan = e.Row.Cells.Count;
Table tblPager = new Table();
TableRow rowTop = new TableRow();
TableCell cellTop1 = new TableCell();
TableCell cellTop2 = new TableCell();
cellTop1.Controls.Add(btnLast);
cellTop1.Controls.Add(btnNext);
cellTop1.Controls.Add(btnPrevious);
cellTop1.Controls.Add(btnFirst);
cellTop1.Controls.Add(lblPager);
cellTop1.Controls.Add(ddlPage);
cellTop2.Controls.Add(lblRowsNumber);
cellTop2.Controls.Add(ddlRowsNumber);
rowTop.Cells.Add(cellTop1);
rowTop.Cells.Add(cellTop2);
TableRow rowButton = new TableRow();
TableCell cellButton1 = new TableCell();
TableCell cellButton2 = new TableCell();
cellButton1.Controls.Add(lblPageInformation);
cellButton2.Controls.Add(lblRowInformation);
rowButton.Cells.Add(cellButton1);
rowButton.Cells.Add(cellButton2);
tblPager.Rows.Add(rowTop);
tblPager.Rows.Add(rowButton);
e.Row.Cells[0].Controls.Add(tblPager);
}
}
}
protected override void OnDataBound(EventArgs e)
{
}
public void ApplyPager(int PageIndex, int RowNumber)
{
SetAllPageDDL1(PageIndex, RowNumber);
SetLableText1(PageIndex, RowNumber);
ddlPage.SelectedValue = PageIndex.ToString();
ddlRowsNumber.SelectedValue = RowNumber.ToString();
}
private void SetLableText1(int PageIndex, int RowNumber)
{
if (ddlPage.Items.Count > 0 && ddlRowsNumber.Items.Count > 0)
{
lblPageInformation.Text = string.Format("صفحه {0} از {1}", PageIndex, ddlPage.Items.Count);
int FirstRecord = (PageIndex - 1) * RowNumber + 1;
int LastRecord = FirstRecord + this.Rows.Count - 1;
lblRowInformation.Text = string.Format("رکورد {0} تا {1} از {2}", FirstRecord, LastRecord, AllRecordCount);
}
}
private void SetLableText()
{
if (ddlPage.Items.Count > 0 && ddlRowsNumber.Items.Count > 0)
{
lblPageInformation.Text = string.Format("صفحه {0} از {1}", ddlPage.SelectedValue, ddlPage.Items.Count);
int FirstRecord = (int.Parse(ddlPage.SelectedValue) - 1) * int.Parse(ddlRowsNumber.SelectedValue) + 1;
int LastRecord = FirstRecord + this.Rows.Count - 1;
lblRowInformation.Text = string.Format("رکورد {0} تا {1} از {2}", FirstRecord, LastRecord, AllRecordCount);
}
}
private void SetAllPageDDL1(int PageIndex, int RowNumber)
{
int page = 1;
if (ddlRowsNumber.Items.Count > 0 && AllRecordCount > 0)
{
int remain = AllRecordCount % RowNumber;
int Page1 = AllRecordCount / RowNumber;
if (remain == 0)
page = Page1;
else
page = Page1 + 1;
}
ddlPage.Items.Clear();
for (int i = 1; i <= page; i++)
{
ddlPage.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}
}
private void SetAllPageDDL()
{
int page = 1;
if (ddlRowsNumber.Items.Count > 0 && AllRecordCount > 0)
{
int remain = AllRecordCount % (int.Parse(ddlRowsNumber.SelectedValue));
int Page1 = AllRecordCount / (int.Parse(ddlRowsNumber.SelectedValue));
if (remain == 0)
page = Page1;
else
page = Page1 + 1;
}
ddlPage.Items.Clear();
for (int i = 1; i <= page; i++)
{
ddlPage.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}
}
protected override void OnInit(EventArgs e)
{
SetControlProperties();
base.OnInit(e);
}
private void SetControlProperties()
{
ShowFooter = true;
btnFirst.Click += new EventHandler(btnFirst_Click);
btnFirst.ID = "btnFirst";
btnFirst.Text = ">>";
btnPrevious.Click += new EventHandler(btnPrevious_Click);
btnPrevious.ID = "Previous";
btnPrevious.Text = ">";
btnNext.Click += new EventHandler(btnNext_Click);
btnNext.ID = "btnNext";
btnNext.Text = "<";
btnLast.Click += new EventHandler(btnLast_Click);
btnLast.ID = "btnLast";
btnLast.Text = "<<";
ddlPage.SelectedIndexChanged += new EventHandler(ddlPage_SelectedIndexChanged);
ddlPage.AutoPostBack = true;
ddlPage.ID = "ddlPage";
ddlRowsNumber.SelectedIndexChanged += new EventHandler(ddlRowsNumber_SelectedIndexChanged);
ddlRowsNumber.AutoPostBack = true;
ddlRowsNumber.ID = "ddlRowsNumber";
lblPager.Text = "صفحه";
lblRowsNumber.Text = "تعداد رکورد";
ddlRowsNumber.Items.Clear();
if (!DesignMode)
{
for (int i = int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordFirst")); i <= int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordLast")); i = i + int.Parse(ApplicationSettingsHandler.GetValue("GridViewRecordDistance")))
{
ddlRowsNumber.Items.Add(new ListItem { Text = i.ToString(), Value = i.ToString() });
}
}
}
void btnFirst_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
OnGoPageClicked(1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = "1";
SetLableText();
}
}
void btnPrevious_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
if (ddlPage.SelectedIndex != 0)
{
OnGoPageClicked(int.Parse(ddlPage.SelectedValue) - 1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = (int.Parse(ddlPage.SelectedValue) - 1).ToString();
SetLableText();
}
}
}
void btnNext_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
if (ddlPage.SelectedValue != ddlPage.Items.Count.ToString())
{
OnGoPageClicked(int.Parse(ddlPage.SelectedValue) + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = (int.Parse(ddlPage.SelectedValue) + 1).ToString();
SetLableText();
}
}
}
void btnLast_Click(object sender, EventArgs e)
{
if (OnGoPageClicked != null)
{
OnGoPageClicked(ddlPage.Items.Count, int.Parse(ddlRowsNumber.SelectedValue), this);
ddlPage.SelectedValue = ddlPage.Items.Count.ToString();
SetLableText();
}
}
void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
{
if (OnPageChanged != null)
OnPageChanged(ddlPage.SelectedIndex + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
SetLableText();
}
void ddlRowsNumber_SelectedIndexChanged(object sender, EventArgs e)
{
if (OnRowsNumberChanged != null)
OnRowsNumberChanged(ddlPage.SelectedIndex + 1, int.Parse(ddlRowsNumber.SelectedValue), this);
SetAllPageDDL();
SetLableText();
}
dabirsiaghi
جمعه 02 فروردین 1392, 17:36 عصر
اگر از پروسیجر استفاده میکنید این میتونه paging را پیاده سازی کند:
ALTER Proc [dbo].[Get_Users_Admin]
(
@UserGroupID int,
@PageIndex INT ,
@NumberOfRows INT ,
@SortColumnName VARCHAR(50) ,
@SortOrderBy VARCHAR(4)
)
As
Begin
Declare @StartRow int
Set @StartRow =(@PageIndex*@NumberOfRows)+1
SELECT
T.RN as RowNumber,
T.UserID,
T.UserName,
T.Email,
T.FirstName,
T.LastName,
T.IsOnline,
T.IsVerify,
T.InsertTime,
T.IsActive,
(Select Count(*) From User_UserGroup Where UserID=T.UserID) As UserGroupNumber
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY
CASE WHEN @SortColumnName = 'Position' AND @SortOrderBy = 'asc' THEN Position END ASC,
CASE WHEN @SortColumnName = 'Position' AND @SortOrderBy = 'desc' THEN Position END DESC
) AS RN
,[UserID]
,[UserName]
,[Email]
,[FirstName]
,[LastName]
,[IsOnline]
,[IsVerify]
,[InsertTime]
,[IsActive]
FROM [dbo].[Users]
Where (@UserGroupID=0 Or (@UserGroupID<>0 And UserID in (Select UserID From User_UserGroup Where UserGroupID=@UserGroupID)))
And IsDeleted=0)T
WHERE T.RN BETWEEN @StartRow -@NumberOfRows AND @StartRow - 1
End
dabirsiaghi
جمعه 02 فروردین 1392, 22:00 عصر
با EF و Linq و ObjectDatasource یک سمپل زدم
اون روش اول رو هم بعدا میزارم
101787
در دیتابیس یک جدول هست با نام Person که اطلاعات اون با paging نمایش داده میشود و دیتا بصورت صفحه به صفحه لود می شودhttp://barnamenevis.org/images/misc/pencil.png
خود پروژه حجمش زیاد شد دی ال ال EF رو از پروژه حذف کردم خودتون بعدن بهش refrence بدین
کوئری دیتابیس :
CREATE TABLE [dbo].[Person](
[PersonID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[PersonID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Person] ON
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (1, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (2, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (3, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (4, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (5, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (6, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (7, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (8, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (9, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (10, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (11, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (12, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (13, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (14, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (15, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (16, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (17, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (18, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (19, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (20, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (21, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (22, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (23, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (24, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (25, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (26, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (27, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (28, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (29, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (30, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (31, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (32, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (33, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (34, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (35, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (36, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (37, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (38, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (39, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (40, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (41, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (42, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (43, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (44, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (45, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (46, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (47, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (48, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (49, N'علی', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (50, N'نادر', N'محمدی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (51, N'نازنین', N'اکبری')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (52, N'محسن', N'رستادی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (53, N'اکبر', N'حسینی')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (54, N'محمد', N'نادر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (55, N'مریم', N'دبیر')
INSERT [dbo].[Person] ([PersonID], [FirstName], [LastName]) VALUES (56, N'مریم', N'دبیر')
SET IDENTITY_INSERT [dbo].[Person] OFF
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.