Страничење на asp.net сајт со LINQ to SQL?

  • Креатор на темата Креатор на темата The One
  • Време на започнување Време на започнување

The One

Оној шо ќутит а све знајт
Член од
16 март 2008
Мислења
189
Поени од реакции
39
здраво ако има некој да ми даде целосен код во C# за страничење на асп.нет страна со LINQ to SQL.
јас имам свој код написано само што мојот код ми ги дава сите страници на пр. ако има 1000 записи по 10 записи да прикажува во страна ке има 100 страни што значи дека нема да ми одговара е сега јас сакам да ги ограничам страните во овој формат previous 1 2 3 4 5 6 7 8 9 10 next и кога ке се кликне на неџт да ги дава следните 10 страни ако може некој нека помага :D
 
Код:
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default3 : System.Web.UI.Page
{
    int totalPages;
    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;
        }
    } 

    private int RowCount
    {
        get
        {
            return (int)ViewState["RowCount"];
        }
        set
        {
            ViewState["RowCount"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FetchData(2, 0);
        }
        else
        {
            PlaceHolder2.Controls.Clear();
            CreatePagingControl(totalPages,CurrentPage);
        }
    }

    private void FetchData(int take, int pageSize)
    {
        using (DataClassesDataContext dc = new DataClassesDataContext())
        {
            var count = dc.Firmis.Count();
            var query = from p in dc.Firmis
                            .OrderBy(o => o.Firma)
                            .Take(take)
                            .Skip(pageSize)
                        select new
                        {
                            Firma = p.Firma,
                            Website = "http://" + p.Website,
                            Email = p.Email,
                            Logo_Path = p.Logo_Path,
                            Count = dc.Firmis.Count()
                        };

            PagedDataSource page = new PagedDataSource();
            page.AllowCustomPaging = true;
            page.AllowPaging = true;
            page.DataSource = query;
            page.PageSize = 2;
            totalPages = count/2;
            page.CurrentPageIndex = CurrentPage;
            DataList1.DataSource = page;
            DataList1.DataBind();

            if (!IsPostBack)
            {
                RowCount = query.First().Count;
                CreatePagingControl(totalPages,CurrentPage);
            }
        }
    }

    private void CreatePagingControl(int totalPages,int currentPage)
    {
        Label spacer = new Label();
        spacer.Text = " ";
        LinkButton lnk = new LinkButton();
        Label dots = new Label();
        spacer.Text = "...";

        if (totalPages == 1)
            return;
        LinkButton lnkFirst = new LinkButton();
        lnkFirst.Click += new EventHandler(lnkFirst_Click);
        lnkFirst.ID = "lnkPageFirst";
        lnkFirst.Text = "First";
        PlaceHolder2.Controls.Add(lnkFirst);
        PlaceHolder2.Controls.Add(spacer);

        if (currentPage > 1)
        {
            LinkButton lnkPrevious = new LinkButton();
            lnkPrevious.Click += new EventHandler(lnkPrevious_Click);
            lnkPrevious.ID = "lnkPagePrevious";
            lnkPrevious.Text = "Previous";
            lnkPrevious.Enabled = true;
            PlaceHolder2.Controls.Add(lnkPrevious);
            PlaceHolder2.Controls.Add(spacer);
        }
        else
        {
            LinkButton lnkPrevious = new LinkButton();
            lnkPrevious.Click += new EventHandler(lbl_Click);
            lnkPrevious.ID = "lnkPagePrevious";
            lnkPrevious.Text = "Previous";
            lnkPrevious.Enabled = false;
            PlaceHolder2.Controls.Add(lnkPrevious);
            PlaceHolder2.Controls.Add(spacer);
        }

        if (currentPage > 2)
        {
            PlaceHolder2.Controls.Add(dots); 
            PlaceHolder2.Controls.Add(spacer);
            if ( currentPage == totalPages && totalPages > 3 )
            {
                lnk.Click += new EventHandler(lbl_Click);
                lnk.ID = "lnkPage" + (currentPage-2).ToString();
                lnk.Text = (currentPage-2).ToString();
                PlaceHolder2.Controls.Add(lnk);
                PlaceHolder2.Controls.Add(spacer);
                lnk.Click += new EventHandler(lbl_Click);
                lnk.ID = "lnkPage" + currentPage.ToString();
                lnk.Text = currentPage.ToString();
                PlaceHolder2.Controls.Add(lnk);
                PlaceHolder2.Controls.Add(spacer);
            }
        }

        if (currentPage != 1 && currentPage != totalPages)
        {
            lnk.Click += new EventHandler(lbl_Click);
            lnk.ID = "lnkPage" + currentPage.ToString();
            lnk.Text = currentPage.ToString();
            PlaceHolder2.Controls.Add(lnk);
            PlaceHolder2.Controls.Add(spacer);
        }

        if (currentPage < (totalPages - 1))
        {
            lnk.Click += new EventHandler(lbl_Click);
            lnk.ID = "lnkPage" + (currentPage+1).ToString();
            lnk.Text = (currentPage + 1).ToString();
            PlaceHolder2.Controls.Add(lnk);
            PlaceHolder2.Controls.Add(spacer);
            if (currentPage == 1 && totalPages > 3)
            {
                lnk.Click += new EventHandler(lbl_Click);
                lnk.ID = "lnkPage" + (currentPage+2).ToString();
                lnk.Text = (currentPage + 2).ToString();
                PlaceHolder2.Controls.Add(lnk);
                PlaceHolder2.Controls.Add(spacer);
            }
            PlaceHolder2.Controls.Add(dots);
            PlaceHolder2.Controls.Add(spacer);
        }

        if (currentPage < totalPages)
        {

            LinkButton lnkNext = new LinkButton();
            lnkNext.Click += new EventHandler(lnkNext_Click);
            lnkNext.ID = "lnkPageNext";
            lnkNext.Text = "Next";
            lnkNext.Enabled = true;
            PlaceHolder2.Controls.Add(lnkNext);
            PlaceHolder2.Controls.Add(spacer);
        }
        else
        {
            LinkButton lnkNext = new LinkButton();
            lnkNext.Click += new EventHandler(lnkNext_Click);
            lnkNext.ID = "lnkPageNext";
            lnkNext.Text = "Next";
            lnkNext.Enabled = false;
            PlaceHolder2.Controls.Add(lnkNext);
            PlaceHolder2.Controls.Add(spacer);
        }
        


        LinkButton lnkLast = new LinkButton();
        lnkLast.Click += new EventHandler(lnkLast_Click);
        lnkLast.ID = "lnkPage" + totalPages.ToString();
        lnkLast.Text = "Last";
        PlaceHolder2.Controls.Add(lnkLast);
        PlaceHolder2.Controls.Add(spacer);

        //for (int i = 0; i < (RowCount / 10) + 1; i++)
        //{
            
        //    LinkButton lnk = new LinkButton();
        //    lnk.Click += new EventHandler(lbl_Click);
        //    lnk.ID = "lnkPage" + (i + 1).ToString();
        //    lnk.Text = (i + 1).ToString();
        //    PlaceHolder2.Controls.Add(lnk);
        //    Label spacer = new Label();
        //    spacer.Text = "&nbsp;";
        //    PlaceHolder2.Controls.Add(spacer);
        //}
    }

    void lbl_Click(object sender, EventArgs e)
    {
        LinkButton lnk = sender as LinkButton;
        int currentPage = int.Parse(lnk.Text);
        int take = currentPage * 2;
        int skip = currentPage == 1 ? 0 : take - 2;
        FetchData(take, skip);
    }

    void lnkPrevious_Click(object sender, EventArgs e)
    {
        LinkButton lnkPrevious = sender as LinkButton;
        int take = (CurrentPage-1) * 2;
        int skip = CurrentPage-1;
        FetchData(take, skip);
    }

    void lnkFirst_Click(object sender, EventArgs e)
    {
        LinkButton lnkFirst = sender as LinkButton;
        int take = 2;
        int skip = 0;
        FetchData(take,skip);
    }
    void lnkLast_Click(object sender, EventArgs e)
    {
        LinkButton lnkLast = sender as LinkButton;
        int take = (totalPages-1)*2;
        int skip = totalPages-1;
        FetchData(take, skip);
    }
    void lnkNext_Click(object sender, EventArgs e)
    {
        LinkButton lnkNext = sender as LinkButton;
        int take = (CurrentPage+1) * 2;
        int skip = CurrentPage+1;
        FetchData(take, skip);
    }
}
Ова е кодот за страничење што го имам треба форматот на линковите за страничење да биде : first previous 1 2 3 ... next last но мене не ми го прикажува така ако имам некоја грешка нека ме исправи некој или ако има подобро решение нека го пише однапред фала
 
Мислам дека ова со PagedDataSource не ти е баш добро решение. Јас би ти препорачал, доколку има голем број на податоци тоа да го направиш со процедура или да ја користиш готовата контрола во асп.нет за paging или пак да ја користиш оваа бесплатна која според мене задоволува голем дел од работите кои треба да ги направиш http://en.webdiyer.com/aspnetpager
 
Фала бато за линкот само ако можеш да ми објасниш како да го искористам ова и како да го имплементирам во кодот ?
 
Готово се снајдов Фала
 

Kajgana Shop

Back
На врв Bottom