带有搜索结果的 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"]
执行相同的操作
我有一个 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"]