2012-06-09 2 views
1

데이터 소스 컨트롤을 사용하지 않고 gridview에서 사용자 지정 페이지 매김을 구현하려고합니다. 지금까지 좋은/완전한 튜토리얼을 찾지 못했습니다. 여기Entity Framework를 사용하여 데이터 소스 컨트롤이없는 asp.net에서 사용자 지정 페이징

내가있는 gridview를 만드는 오전 방법은 다음 버튼을 클릭하면

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="10" 
       onpageindexchanging="GridView1_PageIndexChanging" ShowFooter="True"> 
</asp:GridView> 

이 그리드가 채워집니다. 데이터베이스에서 행 어떻게 한 페이지 만 기록을 가져올 수 있습니다 여전히 페이징을 보여, 목록 상자 컨트롤

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    using (context = new TrackForceDataEntities()) 
    { 
     try 
     { 
      string[] arr = lstStates.Items.Cast<ListItem>().Select(i => i.Text).ToArray(); 
      var searchResults = context.data_vault.Where(d => arr.Contains(d.STATE)).OrderByDescending(d=>d.STATE); 

      GridView1.DataSource = searchResults; 
      GridView1.DataBind(); 
     } 
     catch (Exception exception) 
     { 
      Response.Write(exception.Message); 
     } 
    } 
} 

가 모든 레코드를 가져오고 있기 때문에 위의 쿼리가 매우 느립니다의 항목에 집어 기반으로해야합니까?

다음은 gridview PageIndexChanging 이벤트입니다. 페이지 2를 클릭하면 페이지 2 행이 표시되지만 페이징 링크는 사라집니다.

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    using (context = new TrackForceDataEntities()) 
    { 
     try 
     { 
      // var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d => d.dv_id).Take(10).Skip(2); 


      //var selection = lstStates.Items(i => i.Text).ToArray(); 
      //var result = context.data_vault.Where(x => selection.Contains(x.Prop)); 

      string[] arr = lstStates.Items.Cast<ListItem>().Select(i => i.Text).ToArray(); 

      var result = context.data_vault.Where(d => arr.Contains(d.STATE)).OrderByDescending(d => d.STATE).Skip(e.NewPageIndex * GridView1.PageSize) 
             .Take(GridView1.PageSize) 
       .ToList(); 

      //var result = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d => d.STATE).Skip(e.NewPageIndex * GridView1.PageSize).Take(GridView1.PageSize).ToList(); 
      //// this is very important part too 
      GridView1.PageIndex = e.NewPageIndex; 

      GridView1.DataSource = result; 
      GridView1.DataBind(); 

     } 
     catch (Exception exception) 
     { 
      Response.Write(exception.Message); 
     } 
    } 
} 
+0

링크 문제를 해결하는 방법을 알아 냈습니까? 나는 똑같은 일을하고있다. 꽤 일반적인 시나리오 인 것 같고 많은 문서를 보지 못했습니다. – scojomodena

답변

0

다음 링크를 클릭하십시오. 답변을 얻을 수 있습니다. 페이징은 페이지 번호와 페이지 크기를 전달하여 SQL 서버를 통해 수행되었습니다.

Click here

+0

엔티티 프레임 워크를 사용하여이 작업을 수행하려고합니다. 나는 edmx를 만들었습니다. 저장 프로 시저를 사용하고 싶지 않습니다. – DotnetSparrow

관련 문제