更改Gridview页面后,Gridview不会重新绑定数据

时间:2013-04-06 16:15:45

标签: c# asp.net visual-studio-2010 gridview ispostback

我正在尝试使用亚马逊搜索结果填充我的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();;
}

2 个答案:

答案 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并重新分配您的数据,而无需重复亚马逊搜索。