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

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

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  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 رو به کنترل مورد نظرمون اضافه کنیم .


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

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

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