2011-12-27 16 views
1

我想在此處進行排序以顯示最新的條目。我有一個與pagedDataSource綁定的中繼器控件,我的排序只適用於頁面明智而不是整個集合本身。按日期排序只爲當前頁面,在分頁中繼器控件內工作

這裏是我的代碼背後:

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

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      FetchData(5, 0);      
     } 
     else 
     { 
      plcPaging.Controls.Clear(); 
      CreatePagingControl(); 
     } 

    } 

    private void FetchData(int take, int pageSize) 
    { 
     using (krystaladbDataContext db = new krystaladbDataContext()) 
     { 
      var query = from q in db.question_tables 

         .Take(take) 
         .Skip(pageSize) 

         orderby q.QUEST_POSTED_DATE descending 
         select new 
         { 


          QUEST_ID = q.QUEST_ID, 
          QUEST_TEXT = q.QUEST_TEXT, 
          QUEST_POSTED_DATE = q.QUEST_POSTED_DATE, 
          QUEST_USR_ID = q.QUEST_USR_ID, 
          QUEST_LIKES_COUNT = q.QUEST_LIKES_COUNT, 
          QUEST_REPORT_COUNT = q.QUEST_REPORT_COUNT, 
          Count = db.question_tables.Count() 

         }; 




      PagedDataSource page = new PagedDataSource(); 
      page.AllowCustomPaging = true; 
      page.AllowPaging = true; 
      page.DataSource = query; 
      page.PageSize = 5; 
      QRep.DataSource = page; 
      QRep.DataBind(); 

      if (!IsPostBack) 
      { 
       RowCount = query.First().Count; 
       CreatePagingControl(); 

      } 
     } 
    } 

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

    } 

編輯::包含頁面控件的事件處理程序

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

我想基本上是跨所有的排序工作而不只是一頁。請指點我正確的方向球員。謝謝

+2

你可以在.Take/.Skip之前做orderby嗎?我正在閱讀它的方式,你正在記錄你的頁面,然後對它進行分類。 – Sam 2011-12-27 23:05:52

+0

薩姆,不能這樣做,給出了一個語法錯誤 – 2011-12-27 23:08:09

回答

1

通過之前做的順序。

var query = from q in db.question_tables 
      orderby q.QUEST_POSTED_DATE descending 
      select new 
      { 
       QUEST_ID = q.QUEST_ID, 
       QUEST_TEXT = q.QUEST_TEXT, 
       QUEST_POSTED_DATE = q.QUEST_POSTED_DATE, 
       QUEST_USR_ID = q.QUEST_USR_ID, 
       QUEST_LIKES_COUNT = q.QUEST_LIKES_COUNT, 
       QUEST_REPORT_COUNT = q.QUEST_REPORT_COUNT, 
       Count = db.question_tables.Count() 
      } 
      .Take(take) 
      .Skip(pageSize); 

你可以交替前.Take

使用然後在尋呼控制的LINQ .OrderBy方法。

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

謝謝,但是這給了每一頁上相同的一組數據項。 – 2011-12-27 23:22:04

+0

您只需在頁面加載中用5,0調用FetchData(5,0),它將獲得前5條記錄,因爲沒有任何內容被跳過。您需要在某些頁面調用它並根據它們所在的頁面傳遞新參數。 – 2011-12-27 23:29:42

+0

我已編輯的問題包括分頁的控制事件處理程序。你可以再檢查一次。謝謝 – 2011-12-27 23:41:03