我想在此處進行排序以顯示最新的條目。我有一個與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 = " ";
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);
}
我想基本上是跨所有的排序工作而不只是一頁。請指點我正確的方向球員。謝謝
你可以在.Take/.Skip之前做orderby嗎?我正在閱讀它的方式,你正在記錄你的頁面,然後對它進行分類。 – Sam 2011-12-27 23:05:52
薩姆,不能這樣做,給出了一個語法錯誤 – 2011-12-27 23:08:09