3

私は私のカスタムDataTableDataSource私のListView. 今、私が直面している問題は、が機能してPagingいないことです。

私がやりたいことは、ページ1などをクリックし2たときに、一度に 10 行しかフェッチできないようにすることです。

つまり、ページが読み込まれるときに最初の 10 行だけを取得したいのですが、クリックすると2次の 10 行を取得したいということです。ただし、ページに戻るをクリックしても、ステートメントを再度1実行する必要はありません。どこかからデータをフェッチするだけです ( / )。SQLViewStateCache

正しいアプローチは何ですか?どのように進めればよいでしょうか??

注:使いたくないSQL DataSource

4

1 に答える 1

0

必要なのは PagingDataSource です...

protected void Page_Load(object sender, EventArgs e)
{
    BindData((hdnPage.Value != "" ? Convert.ToInt32(hdnPage.Value) : 0));
}

private void BindData(int? pageNo)
{
    PagedDataSource ds = new PagedDataSource();
    ds.DataSource = [YOUR DATA SOURCE];
    ds.AllowPaging = true;
    ds.PageSize = 10;
    ds.CurrentPageIndex = pageNo ?? 0;

    pnlPaging.Controls.Clear();
    for (int i = 0; i < ds.PageCount; i++)
    {
        if (ds.PageCount < 2)
        {
            break;
        }

        if (pageNo == i || (pageNo == null && i == 0))
        {
            pnlPaging.Controls.Add(new LiteralControl("<span style=\"display:inline-block;margin:0 2px 2px 0;\">" + (i + 1).ToString() + "</span>"));
            continue;
        }

        SuprLinkButton lb = new SuprLinkButton()
        {
            CommandName = "pageThis",
            CommandArgument = i.ToString(),
            ID = "lbPage" + i.ToString(),
            Text = (i + 1).ToString()
        };
        lb.Attributes.Add("style", "display:inline-block;margin:0 2px 2px 0;");
        lb.Command += new CommandEventHandler(lb_Command);
        pnlPaging.Controls.Add(lb);
    }

    [LISTVIEW].DataSource = ds;
    [LISTVIEW].DataBind();
}

すべてのページ リンクを保持するパネルと、現在のページ インデックスを保存するための隠しフィールドがあります。次に、ページングコマンドがあります...

protected void lb_Command(object sender, CommandEventArgs e)
{
    hdnPage.Value = e.CommandArgument.ToString();
    BindData(Convert.ToInt32(e.CommandArgument));
}
于 2012-08-15T17:50:09.863 に答える