2009-09-15 4 views
0

SQL 데이터베이스에서 채워지는 gridview가 있습니다. 결과가 표시되면 각 지구의 새 연락처 페이지에 지구 번호를 연결합니다. 전의. d1.aspx, d2.aspx, d3.aspx 등등. 각 페이지에는 원래 페이지로 돌아가는 링크가 있습니다. 이 경우 원본 페이지가 새로 고쳐지고 이전 gridview 결과가 사라집니다. 이것이 일어나는 것을 막을 수 있습니까? 아니면 이와 같은 일을하는 더 좋은 방법이 있습니까? 페이지가 새로 고쳐지면 Gridview가 사라집니다.

<Columns> 
<asp:BoundField HeaderText="Name" DataField="school" /><asp:BoundField /> 

<asp:TemplateField HeaderText="District" HeaderStyle-HorizontalAlign="Left"> 
<ItemTemplate> 
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("district", "cdms/d{0}.aspx") %>' Text='<%# Eval("district") %>'> 


</asp:HyperLink> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

<EmptyDataTemplate> 
<span style="color: rgb(255, 0, 0);">No records found!</span> 
</EmptyDataTemplate> 
</asp:GridView> 

Codebehind가이 상황을 처리하는 다양한 방법이 많이 있습니다

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
      BuildGridView1(); 
      GridView1.DataBind(); 
      GridView1.Visible = true; 
    } 

    private void BuildGridView1() 
    { 
     GridView1.DataSource = new Select(District.Schema.TableName + ".*") 
      .From(District.Schema) 
      .Where(District.Columns.Zip).IsEqualTo(this.txtZip.Text) 
      .OrderAsc(District.Columns.Zip) 
      .ExecuteDataSet(); 
    } 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     BuildGridView1(); 
     GridView1.PageIndex = e.NewPageIndex; 
     GridView1.DataBind(); 
    } 
+0

Page_Load 이벤트 코드를 추가하여 엉망이되지 않도록 할 수 있습니까? –

+0

페이지로드 이벤트에 아무 것도 없습니다. – Brett

+0

어떻게 데이터 소스를 GridView에 바인딩하고 있습니까? –

답변

0

. 가능한 해결책은 사용자의 쿼리 결과를 세션 변수에 저장하는 것입니다. 페이지로드시 조회 결과가 있는지 확인하십시오. 그렇다면 세션 변수에서 GridView를 채 웁니다. 그렇지 않은 경우 결과에 대해 데이터베이스를 누르고 결과를 세션 변수에 추가하십시오.

테스트하지는 않았지만이 기능이 작동해야합니다. : 당신이 PageIndexChanging 이벤트를 추가하기 전에

private void BuildGridView1() 
      { 
       DataSet ds; 
       if (Session["myDataset"] == null) 
       { 
        ds = new Select(District.Schema.TableName + ".*") 
         .From(District.Schema) 
         .Where(District.Columns.Zip).IsEqualTo(this.txtZip.Text) 
         .OrderAsc(District.Columns.Zip) 
         .ExecuteDataSet(); 

        Session["myDataset"] = ds; 
       } 
       else 
       { 
        ds = (DataSet)Session["myDataSet"]; 
       } 
       GridView1.DataSource = ds; 
      } 
+0

예제를 제공해 줄 수 있습니까? – Brett

+0

네, 당신의 말을 봅니다. 나는 그것을 시도 할 것이다. 감사! – Brett

+0

저는 오늘날 대부분의 사람들이 브라우저에서 여러 탭을 사용하기 때문에 세션 변수를 사용하지 말 것을 권장합니다. 최종 사용자가 두 개의 탭을 열면 한 탭이 ​​다른 탭에 설정된 세션 변수를 덮어 씁니다. 이것은 극히 소수의 최종 사용자에게도 발생할 수 있지만, 일어날 때 매우 혼란 스럽습니다. URL 매개 변수를 사용하여 ZIP 값을 전달하고 페이지를로드하는 방법을 살펴 보는 것이 좋습니다. –

0
private void BindGridViewServer() 
    { 
     DataSet ds =GetData(); 
     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
    } 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     GridView1.PageIndex = e.NewPageIndex; 
     BindGridViewServer(); 
    } 

확실히 EnableSortingAndPagingCallbacks는 = "false"를 확인합니다.

완벽하게 정상적으로 작동합니다.

관련 문제