簡體   English   中英

帶有搜索結果的DataList分頁

[英]DataList paging with search result

我有一個DataList來顯示大量項目,因此我使用分頁和搜索方法來進行過濾並使其變得更容易,兩者都可以正常工作。 但是,在搜索后進行分頁時,數據將返回到(SELECT *),而不是搜索特定項目

我到目前為止所做的:

    SqlDataAdapter adap;
    DataSet ds;
    PagedDataSource adsource;
    int pos;

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.ViewState["vs"] = 0;
            pos = (int)this.ViewState["vs"];

            databind();
            databind2();
        }
     }

public void databind()
    {
        adap = new SqlDataAdapter("select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice from plu p inner join item i on p.item_code = i.item_code WHERE p.publish =1 order by i.LongDesc", constr);
        ds = new DataSet();
        adsource = new PagedDataSource();
        adap.Fill(ds);
        adsource.DataSource = ds.Tables[0].DefaultView;
        adsource.PageSize = 16;
        adsource.AllowPaging = true;
        adsource.CurrentPageIndex = pos;
        CategoryList.DataSource = adsource;
        CategoryList.DataBind();
    }

過濾器部分顯示如下

public void Filter_Command(Object source, DataListCommandEventArgs e)
    {
        if (e.CommandName.Equals("Filter"))
        {
            adap = new SqlDataAdapter("select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice, d.department_code as dcode, d.category_code as dcatecode, c.category_code as ccode from plu p inner join item i on p.item_code = i.item_code inner join EPO_PDU_department d on d.department_code = i.department_code inner join EPO_PDU_Category c on c.category_code = d.category_code WHERE p.publish =1 AND c.category_code = '" + e.CommandArgument.ToString() + "'order by i.LongDesc  ", constr);
            ds = new DataSet();
            adsource = new PagedDataSource();
            adap.Fill(ds);
            adsource.DataSource = ds.Tables[0].DefaultView;
            adsource.PageSize = 16;
            adsource.AllowPaging = true;
            adsource.CurrentPageIndex = pos;
            btnprevious.Enabled = !adsource.IsFirstPage;
            btnnext.Enabled = !adsource.IsLastPage;
            CategoryList.DataSource = adsource;
            CategoryList.DataBind();
        }
    }

我使用的按鈕:

protected void btnprevious_Click(object sender, EventArgs e)
    {
        pos = (int)this.ViewState["vs"];
        pos -= 1;
        this.ViewState["vs"] = pos;
        databind();
    }

    protected void btnnext_Click(object sender, EventArgs e)
    {
        pos = (int)this.ViewState["vs"];
        pos += 1;
        this.ViewState["vs"] = pos;
        databind();
    }

搜索和分頁不能彼此正常工作。 但我希望他們一起工作。 謝謝

*******更新*******

萬一Rik需要更多信息 發生錯誤

讓您進行數據綁定應用過濾器(如果有)

public void databind(string filter = null)
{
    var filterQuery = "";
    if(!string.IsNullOrEmpty(filter)){
        filterQuery = " AND c.category_code = '" + filter + "'";
        this.ViewState.ContainsKey("filter") 
            ? this.ViewState["filter"] = filter
            : this.ViewState.Add("filter", filter);
    }

    var query = "select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice from plu p inner join item i on p.item_code = i.item_code WHERE p.publish =1";
    query += filterQuery;
    query += " order by i.LongDesc";

    adap = new SqlDataAdapter(query, constr);
    ds = new DataSet();
    adsource = new PagedDataSource();
    adap.Fill(ds);
    adsource.DataSource = ds.Tables[0].DefaultView;
    adsource.PageSize = 16;
    adsource.AllowPaging = true;
    adsource.CurrentPageIndex = pos;
    CategoryList.DataSource = adsource;
    CategoryList.DataBind();
}

然后過濾命令:

public void Filter_Command(Object source, DataListCommandEventArgs e)
{
     string filter = e.CommandName.Equals("Filter") ? e.CommandArgument.ToString() : null;
     databind(filter);
}

和你的按鈕

protected void btnprevious_Click(object sender, EventArgs e)
{
    pos = (int)this.ViewState["vs"];
    pos -= 1;
    this.ViewState["vs"] = pos;
    databind(this.ViewState["filter"]);
}

protected void btnnext_Click(object sender, EventArgs e)
{
    pos = (int)this.ViewState["vs"];
    pos += 1;
    this.ViewState["vs"] = pos;
    databind(this.ViewState["filter"]);
}

確保this.ViewState["filter"] (您可以執行與this.ViewState["vs"]

您可以創建一個通用的databind函數,該函數還將期望使用參數進行搜索。 ..然后到處使用此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM