2

グリッドビューに Amazon 検索結果を入力しようとしています。ページがロードされる瞬間、データソースはデータで満たされます。私がやろうとしているのは、検索ボタンを押した後にデータを表示することですが、「レコードが見つかりません」と表示されます。私はさまざまな方法を試しましたが、唯一の方法はポストバックなしでしたが、グリッドビューでページを変更するたびに GetProducts("Playstation") コマンドが再度開始されるという問題がありました。

私が探していた解決策: ページをロード -> ボタンをクリック -> グリッドビューにデータを入力 -> グリッドビューで新しいページを選択すると、データは表示されますが、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();
}

同様に、検索メソッドにも DataSource を割り当てます。

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