2

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

2 回答 2

3

您需要在绑定之前DataSource再次分配。PageIndexChanging

protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    GridView1.DataSource = us.GetProducts("Playstation");
    GridView1.DataBind();
}

同样在 search 方法中分配 DataSource 。

void Search(Object sender,  EventArgs e)
{
    Button clickedButton = (Button)sender;
    GridView1.DataSource = us.GetProducts("Playstation");
    GridView1.DataBind();
}
于 2013-04-06T16:16:47.683 回答
1

我对此的看法是将亚马逊搜索的结果存储到 DataTable 中,然后将 DataTable 存储在会话变量中;这是完全可能的,因为 DataTable 是可序列化的并且将存储在会话中。

然后在您的 grid_PageIndexChanging 事件和 Search 方法中,您可以从会话中检索 DataTable 并重新分配您的数据,而无需重复 Amazon 搜索。

于 2013-04-07T07:49:44.823 回答