PDA

View Full Version : آموزش: کتاب خانه ای برای صفحه بندی DataGrid , Repeater , ...



General-Xenon
جمعه 08 شهریور 1392, 08:45 صبح
سلام به همه عزیزان و اساتید ..
بنا به درخواست دوستان پروژه ای نوشتم تا دوستان مبتدی بتونن استفاده کنن
این کتاب خانه Datapager هست و مورد استفاده جهت صفحه بندی اطلاعاتتون هست .. توضیحات خاصی نداره

همه چیز گویا هست . چند وقت دیگه هم براتون Source رو Share خواهم کرد . برای پیاده سازی روی پروژه خودتون به مثال دقت کنید...

خب بریم سر وقت مثال :
اولین کار اینه که جای این Datapager رو مشخص کنید ... مثلا شما زیر GridView یا بالای Repeater یا حالا هر جایی که نیاز دارید با استفاده از Literal یا Label جایگاهشو مشخص کنید...

<asp:Repeater runat="server" ID="rpt">
<ItemTemplate>
asdasd
</ItemTemplate>
</asp:Repeater>
<asp:Literal runat="server" ID="pg"></asp:Literal>
در این مثال من زیر Repeater قرار دادم ....

بریم برای کد نویسی :
زمانی که DLL رو به پروژتون اضافه کردین
using MJDDatapager;

حالا استفاده مثلا در Page Load :
protected void Page_Load(object sender, EventArgs e)
{
// یک تعریف برای ایجاد و تغییرات کلاس
MJDDatapager.MJDDatapager dp = new MJDDatapager.MJDDatapager
{
LastText = "<", // اسم لینک آخرین صفحه
NextText = "<<",// اسم لینک صفحه بعدی
FirstText = "First Page",// اسم لینک اولین صفحه
PrevText = "Prev",// اسم لینک صفحه قبلی
QueryStringName = "pageid",// نام متغیری که در آدرس دهی بررسی میشود : به دلخواه
SizeRadius = 4,// شعاع نمایش صفحات
SizePerPage = 2,// تعداد رکورد در صفحه
SelectCommand = "SELECT * FROM TBAD",// اگر مستقیم به بانک متصل میشید ، دستور رو این جا قرار بدین
SelectConnection = "DATA SOURCE=.; INITIAL CATALOG=agahihamrah; INTEGRATED SECURITY=SSPI",// رشته اتصال بانک
CssTheme = MJDDatapager.MJDdatapagerThemeCollection.Classic,// معرفی تم برای زیبایی
CreateBaseCSS = true,// زیر سازی پنل رو انجام خواهد داد که اگر False کردین باید خودتون زیر سازی کنید
HtmlResultType = MJDDatapager.MJDDatapager.PagerShowContent.FirstNe xtPagerPrevLastInfo,// نحوه نمایش اطلاعات
CreateBaseCSS3Animation = true// انیمیشن CSS3 رو به کنترل اضافه میکنه
};
// ارتباط خروجی به کنترل نمایش دهنده حالا هرچی میتونه باشه ، GridView , Repeater , ....
// به 2 صورت میتونید کار کنید
// با استفاده از SelectCommand و SelectConnection
dgvx.DataSource = dp.Load(Request);
// شما خودتون بانکتون رو فراخوانی کردین دیگه لازم نیست یک بار دیگه فراخوانی کنید
// اطلاعات رو بصورت Datatble بهش میدید و همون رو براتون دسته بندی میکنه
dgvx.DataSource = dp.Load(Request, new System.Data.DataTable());
// در نهایت برای اینکه شما Datapage رو ببینید باید اتصال بدینش به همون Literal / Label که اول ایجادش کردیم
pg.Text = dp.HTMLCODE;
}

تمام شد .

اما برای توضیحات بعضی از خاصیت ها مثل Theme یا نحوه نمایش خاص :

بریم سروقت Theme بندی : من قبلا 4 تا Theme بصورت Default ساختم و هر کسی که حالا دوست داشت میتونه theme هاشو Share کنه تا دیگران هم استفاده کنن...

MJDDatapager.MJDdatapagerThemeCollection.Classic
MJDDatapager.MJDdatapagerThemeCollection.Minimal
MJDDatapager.MJDdatapagerThemeCollection.Modern
MJDDatapager.MJDdatapagerThemeCollection.Office


اما ساخت Theme جدید ..

// یک کلاس از نوع theme ایجاد کنید
MJDDatapagerTheme newTheme = new MJDDatapagerTheme
{
RootDivCssClass = "barnamenevis",// اسم کلاس پنل اولیه یا همون اسم Theme
FirstCssClass = "a",// کلاس لینک صفحه اول
InfoCssClass = "information",// کلاس نمایش اطلاعات
LastCssClass = "a",// کلاس لینک آخرین صفحه
NextCssClass = "b",// کلاس لینک صفحه بعدی
NumberCssClass = "defaultNumber",// کلاس خود شماره صفحه ها
PrevCssClass = "b",// کلاس لینک صفحه قبلی
SelectedCssClass = "SelectedNumber",// کلاس لینک صفحه انتخاب شده
InternalCSSText = "a{color:black;} a:hover{color:white} ...",// در نهایت همه کلاس ها رو باید CSS شون رو اینجا بریزید ،،،،، دقت کنید همون کلاسایی که بالا دادید رو اینجا تعریف کنید
};


و آخرین بخش : HtmlResultType مقدار ورودی : MJDDatapager.MJDDatapager.PagerShowContent
این بخش نیازی به توضیح نداره فقط اینکه گاهی شما لازم دارید تا اینکه جدا سازی کنید یا نحوه نمایش رو تغییر بدید . من بصورت پیشفرض قرار دادم . هر کدوم که نیاز داشتین رو انتخاب کنید
public enum PagerShowContent {
Pager,
NextPagerPrev,
FirstNextPagerPrevLast,
PagerInfo,
NextPagerPrevInfo,
FirstNextPagerPrevLastInfo,
NextPrev,
FirstNextPrevLast,
Info
}

موفق باشید . دوستان اگر مشکلی بود امر بفرمایید تا درست کنم..
109916

sam166
جمعه 08 شهریور 1392, 09:41 صبح
دوست عزیز یه سمپل بزار
من هر کاری کردم نشد

این dgvx چیه؟؟؟؟؟

aliblue
جمعه 08 شهریور 1392, 09:50 صبح
امکان اجرای stored procedure رو هم بذار.

meisam3322
جمعه 08 شهریور 1392, 11:44 صبح
با سلام.

ممنون از زحمت شما. ولی بهتر بود اون نمایش تعداد رکورد که سمت راست paging نوشته میشه رو مدیریت میزاشتی که هر کی دوست داشت نمایش بده و هر کی هم نخواست اون رو از دید کاربر مخفی کنه. آخه یه کاربر وب سایت چه میدونه رکورد چیه که بخواد واسش نمایش داده بشه. به نظر من همون صفحه بندی با اعداد و ابتدا و انتها کافیه.

ممنون

meisam3322
جمعه 08 شهریور 1392, 11:45 صبح
دوست عزیز یه سمپل بزار
من هر کاری کردم نشد

این dgvx چیه؟؟؟؟؟

میتونه gridview باشه یا datalist و یا ...

General-Xenon
جمعه 08 شهریور 1392, 13:25 عصر
امکان اجرای stored procedure رو هم بذار.

سلام . داره . تست کنید

General-Xenon
جمعه 08 شهریور 1392, 13:27 عصر
با سلام.

ممنون از زحمت شما. ولی بهتر بود اون نمایش تعداد رکورد که سمت راست paging نوشته میشه رو مدیریت میزاشتی که هر کی دوست داشت نمایش بده و هر کی هم نخواست اون رو از دید کاربر مخفی کنه. آخه یه کاربر وب سایت چه میدونه رکورد چیه که بخواد واسش نمایش داده بشه. به نظر من همون صفحه بندی با اعداد و ابتدا و انتها کافیه.

ممنون

سلام. آقا میثم این بخش رو که گذاشتم هموه فرمایش شماست
public enum PagerShowContent {
Pager,
NextPagerPrev,
FirstNextPagerPrevLast,
PagerInfo,
NextPagerPrevInfo,
FirstNextPagerPrevLastInfo,
NextPrev,
FirstNextPrevLast,
Info
}
بسته به نوع نیاز شما تغییر خواهد کرد . این یک امکان اضافیست ... مثلا در پنل Admin گاهی اوقات نیاز هست تا مدیر مقدار اطلاعات رو داشته باشه .. موفق باشید

fakhravari
جمعه 08 شهریور 1392, 13:52 عصر
تعداد 28 رکورد در 3 صفحه | 10 رکورد در هر صفحه (http://localhost:28511/MJDDatapager/Default.aspx)
رکورد ها رو میاره اما داده ای نشون نمیده.
یه سمپل بزارید

General-Xenon
جمعه 08 شهریور 1392, 13:59 عصر
دوست عزیز یه سمپل بزار
من هر کاری کردم نشد

این dgvx چیه؟؟؟؟؟

109933


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="smp.aspx.cs" Inherits="Barnamenevis.smp" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Literal runat="server" ID="headpager"></asp:Literal>
<asp:Repeater runat="server" ID="GRIDRPT">
<ItemTemplate><span class="gridcnt"><%# Eval("id") %></span></ItemTemplate>
</asp:Repeater>
<asp:Literal runat="server" ID="footpager"></asp:Literal>
<style>
.gridcnt { display:inline-block; width:25%; height:100px; background-color:#EDEDED; }
.gridcnt:hover { background-color:#999; }
</style>
</div>
</form>
</body>
</html>




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MJDDatapager;

namespace Barnamenevis
{
public partial class smp : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("id");
for (int i = 0; i < 100; i++) { dt.Rows.Add(i.ToString()); }

MJDDatapager.MJDDatapager m = new MJDDatapager.MJDDatapager
{
CreateBaseCSS = true,
CreateBaseCSS3Animation = true,
CssTheme = MJDdatapagerThemeCollection.Modern,
HtmlResultType = MJDDatapager.MJDDatapager.PagerShowContent.FirstNe xtPagerPrevLast,
QueryStringName = "pg",
SizePerPage = 16,
SizeRadius = 3,
SelectConnection="",
SelectCommand=""
};
GRIDRPT.DataSource = m.Load(Request,dt);
GRIDRPT.DataBind();
headpager.Text = m.HTMLCODE;
footpager.Text = m.HTMLCODE;
}
}
}

fakhravari
جمعه 08 شهریور 1392, 14:20 عصر
:تشویق: زیباست

mohammad kafiyan
شنبه 09 شهریور 1392, 10:52 صبح
برادر گل میشه راجب صفحه بندی توضیح بدهید که سمینار چگونه است آیا این صفحه بندی در در سمت sql انجام میشه و در هر صفحه تعداد رکورد را بر می گرداند
یا به روش دیگری عملیات صفحه بندی انجام میشه ؟؟؟
آیا میشه به صورت ajax باشه یا نه؟؟

General-Xenon
شنبه 09 شهریور 1392, 22:04 عصر
برادر گل میشه راجب صفحه بندی توضیح بدهید که سمینار چگونه است آیا این صفحه بندی در در سمت sql انجام میشه و در هر صفحه تعداد رکورد را بر می گرداند
یا به روش دیگری عملیات صفحه بندی انجام میشه ؟؟؟
آیا میشه به صورت ajax باشه یا نه؟؟

سلام دوست من. این کتابخانه AJAX ساپورت نمی کنه و همچنین اطلاعات در SQL بررسی نمی شه . اما اگر از Load تعداد رکورد بالا داری استفاده می کنی من این دستور SQL رو بهت پیشنهاد می کنم. با استفاده از این دستور برای خودت یک کتابخانه بساز
دقت داشته باش
من به عنوان مثال یک جدول TBAD دارم با فیلد ID,DATA که از نوغ INT,NTEXT هست. حالا با استفاده از جدول داخلی اقدام به Page کردن اطلاعات میکنم و در نهایت باید فیلد ALLRECORD رو از نمایش حذف کنی چون این فیلد مقدار کل جدول رو بر میگردونه که بتونی تشخیص بدی که Page هات چندتاست...

موفق باشی

declare @PageSize int , @PageNumber int;
set @PageSize = 3;
set @PageNumber = 1;

declare @a as table(Row INT,ID INT,DATA NTEXT);
INSERT INTO @a
SELECT ROW_NUMBER() OVER(ORDER BY ID),
[ID],[DATA] FROM TBAD;
SELECT TOP (@PageSize) *,MAX(Row) OVER() AS AllRecord
FROM @a WHERE ROW > ((@PageNumber-1) * @PageSize);

mohammad kafiyan
شنبه 09 شهریور 1392, 23:56 عصر
با تشکر از شما من عملیات صفحه بندی را در sql انجام می دهم ولی مشکل من زمانی است که نمی توانم اطلاعات رکورد را بر اساس صفحه بندی صورت گرفته با jquery.ajax در datalist که label هایم به صورت template تعریف شده نمایش بدهم؟؟؟؟؟؟؟؟؟؟؟؟؟
اگر بخواهم بدونه ajax کار کنم چگونه می توانم عملیات صفحه بندی را انجام بدهم البته در خود sqlصفحه بندی می کنم ولی نحوه ی نمایش شماره هاو آخرین صفحه و اولین و صفحه بعدی و قبلی چگونه است و برای کار با اینها کد نویسی کنم؟؟؟؟

General-Xenon
دوشنبه 11 شهریور 1392, 02:09 صبح
با تشکر از شما من عملیات صفحه بندی را در sql انجام می دهم ولی مشکل من زمانی است که نمی توانم اطلاعات رکورد را بر اساس صفحه بندی صورت گرفته با jquery.ajax در datalist که label هایم به صورت template تعریف شده نمایش بدهم؟؟؟؟؟؟؟؟؟؟؟؟؟
اگر بخواهم بدونه ajax کار کنم چگونه می توانم عملیات صفحه بندی را انجام بدهم البته در خود sqlصفحه بندی می کنم ولی نحوه ی نمایش شماره هاو آخرین صفحه و اولین و صفحه بعدی و قبلی چگونه است و برای کار با اینها کد نویسی کنم؟؟؟؟

ببین همونطور که گفتم SQL محدود هست
برای این بخش که لازم داریش، کد نویسی کن. برای AJAX هم فکر نکنم مشکل داشته باشی . باید با استفاده از POST BACK کار کنی...

mohammad973
پنج شنبه 28 شهریور 1392, 10:37 صبح
تعداد 28 رکورد در 3 صفحه | 10 رکورد در هر صفحه (http://localhost:28511/MJDDatapager/Default.aspx)
رکورد ها رو میاره اما داده ای نشون نمیده.



دوستان ، من این کار رو کردم و همین اتفاقی که آقای fakhravari گفتند میوفته !!! هیچ رکوردی نشون داده نمیشه !
چکار کنم ؟

Ebrahim11
شنبه 13 مهر 1392, 21:55 عصر
تعداد 28 رکورد در 3 صفحه | 10 رکورد در هر صفحه (http://localhost:28511/MJDDatapager/Default.aspx)
رکورد ها رو میاره اما داده ای نشون نمیده.
یه سمپل بزارید

اینو باید اضافه کنی

grid.DataBind();

Mohammad_dn
سه شنبه 16 مهر 1392, 17:58 عصر
سلام...آقا کسی میدونه آیا این کتابخانه بهینه هست یا نه؟یعنی هر بار بر فرض 10 رکورد رو میخونه و یا نه همرو با هم میخونه و بعد صفحه بندی رو انجام میده....؟؟؟؟؟؟؟؟؟

fakhravari
سه شنبه 16 مهر 1392, 18:01 عصر
همه رکورد ها را میاره هیچ فرقی نداره یعنی select all ولی با ظاهر خوب.

پست 12 برسی کنید خوب است

Mohammad_dn
سه شنبه 16 مهر 1392, 18:52 عصر
آقای fakhravari (http://barnamenevis.org/member.php?128926-fakhravari) لطفا اگه میشه شما یه نمونه سورس بزارید تا من بتونم ازش استفاده کنم ... میخوام بهینه باشه....لطفا تا حد امکان کد ندین،نمونه سورس بدین

با تشکر فراوان

fakhravari
چهارشنبه 17 مهر 1392, 18:37 عصر
سلام
متاسفانه دوران سربازی هستم. دسترسی به سیستم ندارم.
در اولین زمان تست میکن

ms_jadoo
سه شنبه 18 شهریور 1393, 13:53 عصر
دوست عزیز این dgvx در کجا استفاده شده . اگر ممکن هست تو ایمیل برام پاسخ بدی ممنون میشم
mnsr.1360@yahoo.com
خیلی ممنون از زحماتی که کشیدی