2013-04-06 3 views
3

아마존 검색 결과로 gridview를 채우려고합니다. 페이지가로드되는 순간에 데이터 소스는 데이터로 채워집니다. 내가하려는 것은 검색 버튼을 눌러 데이터를 보여 주지만 "발견 된 레코드 없음"을 표시합니다. 나는 여러 가지 방법을 시도했는데, 그것이 작동하는 유일한 방법은 포스트 백이 아니지만, 문제는 gridview에서 페이지를 변경할 때마다 GetProducts ("Playstation") 명령이 다시 시작된다는 것입니다.Gridview는 Gridview 페이지를 변경 한 후 데이터를 리 바인드하지 않습니다.

해결 방법 : 페이지로드 -> 클릭 버튼 -> 데이터로 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();; 
} 

답변

1

이에 대한 필자는 DataTable을로 아마존의 검색 결과를 저장하고 세션 변수에 DataTable에 저장하는 것입니다; DataTable이 Serializable이며 세션에 저장할 것이기 때문에 이것은 전적으로 가능합니다.

그런 다음 grid_PageIndexChanging 이벤트 및 검색 메서드에서 세션에서 DataTable을 검색하고 Amazon 검색을 반복하지 않고 데이터를 다시 할당 할 수 있습니다.

+0

감사합니다! 이것은 나를 위해 일했으며 데이터 세트 변수를 만들었습니다. 검색 버튼을 클릭하면 데이터가 추가됩니다. – Suprsonic

4

당신은 그것을 결합하기 전에 PageIndexChanging 다시 DataSource을 할당해야합니다.

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(); 
} 
+0

하지만이 방법을 사용하면 다시 아마존에서 검색을 수행합니다. 어쩌면 아마존에서 검색 할 때마다 페이지를 변경하는 데 1-2 초가 걸리기 때문에 데이터를 어딘가에 바인딩 할 수있는 방법이 아닙니다. – Suprsonic

관련 문제