انجمن‌های فارس وب

نسخه کامل: آموزش : افزودن خصوصیت paging به کنترل DataList در دات نت
شما در حال بازدید از بایگانی ارسال های انجمن هستید این نسخه کامل نیست : برای مشاهده نسخه کامل اینجا کلیک کنید
سلام
اينم يه آموزش بدردبخور براي دوست داران ASP چشمک

یکی از موضوعاتی که معمولا برنامه نویسان محیط 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,"imageURL") %>' />
                <asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"imageName") %>'></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 رو به کنترل مورد نظرمون اضافه کنیم .


منبع : سايت پرشين تولز
نويسنده : amin_lili

اميدوارم اين روش ساده ،‌بدردتون بخوره خوشحال

مرجع آدرس ها