2012-11-15 2 views
0

C# 백엔드를 사용하여 extjs 그리드 pangel에 페이징 도구 모음을 구현하려고합니다 ... 그 방법에 대해 어떻게 시작해야합니까 ... 시작 및 제한을 사용하여 시도했지만 어떻게해야 잘 모르겠습니다. 공장. 누군가 내 눈금이 내 응용 프로그램을 느리게하고있는 모든 500 datas를 받고 있기 때문에 그리드에서 페이지 당 약 20 개의 레코드를 보낼 수있는 방법을 알려주십시오. 내 저장소에 json을 보내는 컨트롤러입니다.C# 그리드 페이징 및 ExtJS 4.1

public JsonResult getData(int start, int limit) 
{ 
    List<MyItem> items = new List<MyItem>(); 
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices1"].ConnectionString)) 
    { 
    SqlCommand cmd = con.CreateCommand(); 
    cmd.CommandText = "SELECT State, Capital FROM MYDBTABLE"; 
    con.Open(); 
    SqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     MyItem item = new MyItem(); 
     item.State = reader[0].ToString(); 
     item.Capital = reader[1].ToString(); 
     items.Add(item); 
    } 
    con.Close(); 

    return Json(new { myTable = items }, JsonRequestBehavior.AllowGet); 
    } 
} 

도움이

this.store = Ext.create('Ext.data.JsonStore', { 
     autoLoad: true, 
     storeId: 'mystore1', 
     pageSize: 20, 
     fields: [ 
    { name: 'State' }, 
    { name: 'Capital' } 
    ], 
     sorters: [ 
      { 
       property: 'State', 
       direct: 'ASC' 
      }], 
     scope: this, 
     proxy: { 
      type: 'ajax', 
      scope: this, 
      url: 'StateC/getData', 
      autoLoad: { params: { 
       start: 0, 
       limit: 20 
      } 
      }, 
      reader: { 
       type: 'json', 
       root: 'myTable' 
      } 
     } 
    }); 

답변

1

나는 현재 너무 확실히이 내 구문을 확인 오류,하지만 일반적인 논리가 비슷합니다 MySQL의 & PHP를 사용하고 내 가게이다, 그러나 구문은 조금 쿼리에 대해 MsSQL에서 더 모호합니다.

int limit = Request.QueryString["limit"]; 
int page= Request.QueryString["page"]; 
int upperBound = limit * page; 
int lowerBound = limit * (page - 1) + 1; 

내 생각 : 당신이 아약스 호출에에 extjs에 의해 전달되는 매개 변수를 얻을 필요가

http://www.codeguru.com/csharp/.net/net_data/article.php/c19611/Paging-in-SQL-Server-2005.htm

첫째 : 나는 MSSQL에 대한 입문서이 링크를 제안하는 것은 구문을 시스템 권장 이 질문에 대해서는 다음과 같이 처리해야합니다.

SELECT * FROM (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY person) AS rownum, 
      MYDBTABLE.State, 
      MYDBTABLE.Capital 
     FROM MYDBTABLE 
    ) AS States 
WHERE States.rownum >= {lowerBound} AND States.rownum <= {upperBound} 
+0

스티븐 도움에 감사드립니다. 나는 C#을 사용합니다. PHP에 대한 다양한 예제를 보았습니다. 그러나 C#으로 작업하는 방법에 대해 전혀 몰라요. 당신의 대답으로 어디서 시작해야할지 모르겠습니다. Ajax 호출에서 첫 번째와 마지막으로 전달할 수 있지만 upperBound 및 lowerBound의 목적은 무엇이며 'totalProperty'는 어떻게 계산됩니까? 어딘가에 작동 예제가 있습니다 – EagleFox

+0

죄송합니다. 시작 및 제한 값이 표시되지 않았습니다. 지나가고, 상한선과 하한선은 어느 20 세트의 레코드를 취해야 하는지를 말하고있는 것입니다. 전달하는 시작 및 제한 값을 사용하여 lowerBound = start 및 upperBound = start + limit. 그 외에는 SQL 쿼리가 MsSQL에서 실행되며 20 개의 레코드 집합 만 제공한다고 생각합니다. 이 쿼리 {cmd.CommandText = "SELECT State, Capital FROM MYDBTABLE"}에서이 코드를 사용하면 코드가 원하는대로 작동한다고 생각합니다. 당신은 문자열로 쿼리를 구축하기 위해 저/상한을 연결해야합니다. –

+0

이 페이징이 돌아 왔고 다시 나를 괴롭히기 시작했습니다 ... ... (... 해당 매개 변수가 extjs에서 전달되어야합니다 ... 여전히 첫 페이지에는 전체 데이터가 표시되고 두 번째 페이지에는 전체 데이터가 표시되지만 툴바 페이지 2를 말합니다 – EagleFox