我正在尝试使用亚马逊搜索结果填充我的gridview。在页面加载时,数据源将填充数据。我想要做的是按下搜索按钮后显示数据,但它显示“找不到记录”。我尝试了很多不同的方法,唯一的方法就是没有回发,但问题是我每次在gridview上更改页面时,GetProducts(“Playstation”)命令都会重新启动。
我一直在寻找的解决方案:加载页面 - >点击按钮 - >用数据填充gridview - >在gridview中选择新页面时,会显示数据,但不会再次启动Getproducts(“Playstation”)。
有办法做到这一点吗?
protected void Page_Load(object sender, EventArgs e) {
Button1.Click += new EventHandler(this.GreetingBtn_Click);
if (!Page.IsPostBack) {
AmazonSearch us = new Amazon.PAAPI.AmazonSearch();
GridView1.DataSource = us.GetProducts("Playstation");
}
}
void Search(Object sender, EventArgs e) {
Button clickedButton = (Button) sender;
GridView1.DataBind();
}
protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e) {
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
修改
感谢FastGeeks anwser,我想通了。我在代码中添加了变量ds。并做了以下更改:
DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e) {
Button1.Click += new EventHandler(this.GreetingBtn_Click);
}
void Search(Object sender, EventArgs e) {
Button clickedButton = (Button) sender;
AmazonSearch us = new Amazon.PAAPI.AmazonSearch();
ds.Tables.Add(us.GetProducts("Playstation"));
GridView1.DataSource = ds;
Session["ds"] = ds;
GridView1.DataBind();
}
protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e) {
GridView1.PageIndex = e.NewPageIndex;
ds = (DataSet)Session["ds"];
GridView1.DataSource = ds;
GridView1.DataBind();;
}
答案 0 :(得分:4)
在绑定之前,您需要在DataSource
中再次指定PageIndexChanging
。
protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = us.GetProducts("Playstation");
GridView1.DataBind();
}
同样在搜索方法中分配DataSource。
void Search(Object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
GridView1.DataSource = us.GetProducts("Playstation");
GridView1.DataBind();
}
答案 1 :(得分:1)
我对此的看法是将Amazon搜索的结果存储到DataTable中,然后将DataTable存储在会话变量中;这完全有可能,因为DataTable是Serializable并将存储在会话中。
然后在您的grid_PageIndexChanging事件和Search方法中,您可以从会话中检索DataTable并重新分配您的数据,而无需重复亚马逊搜索。