نمایش نتایج 1 تا 13 از 13

نام تاپیک: پایان مشکل پیجینگ در DATA LIST

  1. #1

    پایان مشکل پیجینگ در DATA LIST

    یکی از موضوعاتی که معمولا برنامه نویسان محیط ASP.NET با آن مواجه هستند صفحه بندی اطلاعات دریافتی از دیتابیس درون GridView است ( که براحتی قابل انجام هست) . از طرفی در بسیاری از مواقع دوست داریم اطلاعات رو در بیش از یک ستون نمایش دهیم که مجبوریم از کنترل DataList استفاده کنیم چون GridView خاصیت RepeatColumns رو نداره و دقیقا مشکل همین جاست زیرا DataList هم خاصیت paging رو نداره . بنابراین برای استفاده از هر دو خاصیت RepeatColumns و paging به مشکل بر خواهیم خورد . در این مقاله مختصر آموزشی قصد دارم راه حلی بسیار ساده و البته اصولی رو براتون شرح بدم که مشکل فوق رو براحتی حل می کنه .
    در دات نت کلاسی با عنوان PagedDataSource در System.Web.UI.WebControls namespace وجود داره که قابلیت paging رو برای کنترل های دات نت فراهم می کنه . ما با استفاده از این کلاس خاصیت paging رو به کنترل DataList اضافه می کنیم . (این مطلب در مورد Repeater هم صادق هست)
    ابتدا یک پروژه وب سایت ایجاد کنید و در صفحه Default.aspx کدهای HTML زیر را وارد کنید :

    <table width="100%" border="0">
    <tr>
    <td> DataList control with Paging</td>
    </tr>
    <tr>
    <td> <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
    </tr>
    <tr>
    <td> <asp:button id="cmdPrev" runat="server" text=" << " OnClick="cmdPrev_Click"></asp:button>
    <asp:button id="cmdNext" runat="server" text=" >> " OnClick="cmdNext_Click"></asp:button></td>
    </tr>
    </table>
    <asp:DataList ID="dlPaging" runat="server" RepeatColumns="2">
    <ItemTemplate>
    <asp:Image ID="img1" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"i mageURL") %>' />
    <asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"image Name") %>'></asp:Label>
    </ItemTemplate>
    </asp:DataList>



    حالا میریم به Code View :
    در متد Page_Load کد زیر را وارد می کنیم :

    if  (!IsPostBack)
    {
    FetchDataToDataList();
    }


    و سپس کد مربوط به متد FetchDataToDataList :

     private void FetchDataToDataList()
    {
    SqlConnection con = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=yourDataBase;Data Source=YourServer");
    SqlCommand cmd = new SqlCommand("select imageUrl,imageName from imageTable", con);
    con.Open();
    PagedDataSource pagedDS = new PagedDataSource();
    DataTable dt = new DataTable("_T");
    dt.Load( cmd.ExecuteReader());
    pagedDS.DataSource =dt.DefaultView;
    pagedDS.AllowPaging = true;
    pagedDS.PageSize = 5;
    pagedDS.CurrentPageIndex = CurrentPage;
    dlPaging.DataSource = pagedDS;
    dlPaging.DataBind();
    con.Close();

    lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "+ pagedDS.PageCount.ToString();
    // Disable Prev or Next buttons if necessary
    cmdPrev.Enabled = !pagedDS.IsFirstPage;
    cmdNext.Enabled = !pagedDS.IsLastPage;
    }





    همونطور که در کد بالا می بینیم ابتدا connection مورد نظر رو می سازیم و توسط sqlCommand دستور select مورد نظرمون رو اجرا می کنیم . قبل از اجرای select از کلاس PagedDataSource یک نمونه با نام pagedDS ایجاد می کنیم . همچنین یک Table با نام dt ایجاد کرده و با اجرای sqlCommand آن را پر می کینم . حالا لازمه شیئ pagedDS رو توسط dt پر کنیم و تنظیمات لازم مربوط به خاصیت paging رو براش ست کنیم .در نهایت مشخص می کنیم که CurrentPageIndex مقدار صفر داشته باشه تا صفحه اول اطلاعات در ابتدا نمایش داده شوند . و در آخر شیئ pagedDS رو به خصوصیت dlPaging.DataSource انتصاب می دیم.در اینجا لازمه درباره CurrentPage توضیح بدم .
    CurrentPage یک property هست که در هر لحظه شماره صفحه جاری را در this.ViewState["_CurrentPage"] نگهداری می کنه . کد این property به شرح زیره :
    public int  CurrentPage
    {
    get
    {
    // look for current page in ViewState
    object o = this.ViewState["_CurrentPage"];
    if (o == null)
    return 0; // default page index of 0
    else
    return (int)o;
    }

    set
    {
    this.ViewState["_CurrentPage"] = value;
    }
    }



    حالا لازمه برای دو دگمه ای که ما رو به صفحات قبل و بعد می بره کدهای زیر رو بنویسیم :
    protected void cmdPrev_Click(object sender, EventArgs  e)
    {
    // Set viewstate variable to the previous page
    CurrentPage -= 1;

    // Reload control
    FetchDataToDataList();
    }
    protected void cmdNext_Click(object sender, EventArgs e)
    {
    // Set viewstate variable to the previous page
    CurrentPage += 1;

    // Reload control
    FetchDataToDataList();
    }

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


    منبع : سايت پرشين تولز
    فایل های ضمیمه فایل های ضمیمه

  2. #2
    کاربر دائمی آواتار Neo Persian
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    طهران
    سن
    41
    پست
    171

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    ممنون از بابت مقاله

    ولي مشكل اساسي كه اين روش داره راندمان پايين اون هستش فرض كنيد حدود 10000 ركورد در اون جدول وجود داره و قراره براي هر صفحه فقط 100 ركورد نمايش داده بشه، در اين صورت براي نمايش هر صفحه 10000 ركورد درخواست ميشه و فقط از 100 تاي اون استفاده ميشه!

    روش بهينه تر اينه كه عمليات paging در سمت ديتابيش انجام بشه كه با اومدن SQL 2005 و ()ROW_NUMBER استفاده از اين روش ميسر شده

  3. #3

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    بد نبود منبع رو هم معرفی می کردی !!!!!

  4. #4

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    دوست عزیز بالای فایل ضمیمه نوشتم که

    آقای neo حرف شما کاملا درسته.ولی دیتا لیست با قابلیت پیجینگ رو همه برای ساخت گالری میخوان که شاید 50 تا رکورد بیشتر نشه.
    آخرین ویرایش به وسیله saleh.hi.62 : چهارشنبه 10 مهر 1387 در 18:12 عصر

  5. #5

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    دوست عزیز خیلی ممنون از مقاله خوبتون

  6. #6
    کاربر دائمی آواتار khz-web1
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    اهواز
    پست
    614

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    این مقاله مال آقای دلشاد هستش....
    من فکر می کنم که شما اشتباه منبع دادید....
    آقای دلشاد اگر درست می گم ، تایید کنید

  7. #7

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    دوستان محترم یک سوال دارم
    آیا این روشی که ایشون گفتند برای زمانی که دیتالیست نهایتا 200 تا رکورد بر میگردونه بهینه هست؟

  8. #8

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    روشی که دادن ماله آقای دلشاده که ایشون منبع ذکر نکردن
    و دوم اینکه این روشی که ایشون پیش گرفتن بهینه نیست البته نظر شخصی بنده هست

  9. #9
    کاربر دائمی آواتار alonemm
    تاریخ عضویت
    آذر 1388
    محل زندگی
    تهرانپارس
    سن
    36
    پست
    1,846

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    باسلام:
    با تشکر از دوستمون چند تذکر:
    روش پیاده سازی پیجینگ مخصوصا در وب باید با کوئری باشه که فقط به تعداد نمایش رکورد واکشی بشه.
    نه اینکه تمامی رکورد ها از سمت ماشین پایگاه داده واکشی بشه و فقط پشت پرده نمایش داده نشه.
    در این مورد هم در سایت خیلی بحث شده.

    موفق باشید.

  10. #10

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    میشه چند تا از لینکهایی که بحث شده رو به من بدید؟ چون من هر چی سرچ کردم پیدا نکردم!

  11. #11
    کاربر دائمی آواتار alonemm
    تاریخ عضویت
    آذر 1388
    محل زندگی
    تهرانپارس
    سن
    36
    پست
    1,846

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    توی پست های آقای مصطفی دیندار جستجو کنید.

  12. #12

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    نقل قول نوشته شده توسط Neo Persian مشاهده تاپیک
    ممنون از بابت مقاله

    ولي مشكل اساسي كه اين روش داره راندمان پايين اون هستش فرض كنيد حدود 10000 ركورد در اون جدول وجود داره و قراره براي هر صفحه فقط 100 ركورد نمايش داده بشه، در اين صورت براي نمايش هر صفحه 10000 ركورد درخواست ميشه و فقط از 100 تاي اون استفاده ميشه!

    روش بهينه تر اينه كه عمليات paging در سمت ديتابيش انجام بشه كه با اومدن SQL 2005 و ()ROW_NUMBER استفاده از اين روش ميسر شده
    با سلام میشه روش بهینه رو کامل توضیح بدید یا لینک اموزش ش رو لطفا بزارید

  13. #13

    نقل قول: پایان مشکل پیجینگ در DATA LIST

    دوستان روش بهینه این صفحه بندی چطوریه؟؟

    الان با این ستور پروسیجر بهینه میشه
    ALTER PROCEDURE Select_User_Emtehan
    (
    @startRowIndex int,
    @pageSize int
    )

    AS

    Begin
    SET NOCOUNT ON;
    SET @startRowIndex = @startRowIndex + 1
    Select name, family, user_name from userreg where roleid <> 1 and roleid <> 3
    End
    RETURN


    خواهشن جواب بدید
    آخرین ویرایش به وسیله mjt10063 : سه شنبه 07 خرداد 1392 در 19:40 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •