Ext.Net 학습 노트 09: Ext.Net Store 사용 방법

15499 단어 store
우리는 필기에서 데이터 사용 방법를 소개했다. 데이터를 하나의 DataView에 연결하여 표시하는데 그 안에 Store를 사용했다. 단지 모든 데이터를 직접 연결하는 Store일 뿐이다. 원격 획득 데이터, 원격 정렬, 페이지 나누기 등 기능을 갖추지 못했기 때문에 오늘 우리는 어떻게 실현하는지 살펴보자.
Handler를 사용하여 페이지 나누기 처리
우선 일반 프로세서를 만듭니다. 저는 StoreHandler라고 명명합니다.ashx 및 처리 프로세스 코드는 다음과 같습니다.
public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/json";
    var requestParams = new StoreRequestParameters(context);
    int start = requestParams.Start;
    int limit = requestParams.Limit;
    DataSorter[] sorter = requestParams.Sort;
    DataFilter[] filter = requestParams.Filter;

    Paging<UserInfo> employees = GetPageData(start, limit, filter, sorter);
    context.Response.Write(JSON.Serialize(employees));
}

이 방법에서 우리는 우선HttpContext를 사용하여StoreRequestParameters 대상을 만들고 이 대상에는 Start,Limit,Page,sort,Filter,Group 등의 매개 변수가 포함되어 있다.
  • Start: 몇 줄부터 데이터 로깅 가져오기
  • Limit: 데이터를 얻는 양, 한 번에 몇 줄의 데이터를 얻는가
  • 페이지: 현재 페이지
  • Sort: 정렬된 조건 집합
  • Filter: 필터링 기준 집합
  • Group: 그룹을 나누는 조건 집합
  • 우리는 이 데이터를 얻은 후에 GetPageData를 통해 조건에 맞는 데이터를 얻은 다음에 Paging 클래스의 실례를 만들었다. 이 클래스에는 데이터와 TotalRecords 두 가지 중요한 속성이 포함되어 있다.
  • Data: IEnumerable 유형의 데이터 컬렉션
  • TotalRecords: 클라이언트의 페이지 나누기(페이지 번호 생성)용 데이터 총 줄 수
  • 데이터 검색 방법의 코드는 다음과 같습니다.
    public Paging<UserInfo> GetPageData(int start, int limit,
        DataFilter[] filter, DataSorter[] sorter)
    {
        var userInfoList = UserInfo.GetData();
    
    Paging<UserInfo> result = new Paging<UserInfo>(); result.TotalRecords = userInfoList.Count; result.Data = userInfoList.Skip(start).Take(limit).ToList();
    
        return result;
    }

    이 handler를 사용하면 다음과 같이 Store를 개조해야 합니다.
    <ext:Store runat="server" ID="storeUserInfo" PageSize="5" RemoteFilter="true" RemoteSort="true">
        <Model>
            <ext:Model ID="Model1" runat="server" IDProperty="Name">
                <Fields>
                    <ext:ModelField Name="Name" Type="String"></ext:ModelField>
                    <ext:ModelField Name="Gender" Type="String"></ext:ModelField>
                    <ext:ModelField Name="Age" Type="Int"></ext:ModelField>
                </Fields>
            </ext:Model>
        </Model>
     <Proxy> <ext:AjaxProxy Url="StoreHandler.ashx"> <ActionMethods Read="GET" /> <Reader> <ext:JsonReader Root="data" /> </Reader> </ext:AjaxProxy> </Proxy>
    </ext:Store>

    AjaxProxy의 Url이 바로 저희의Handler 주소입니다.ActionMethods는 요청 방식이고 JsonReader는reader 속성이며 데이터 루트 노드는 데이터입니다.여기는 모두 ExtJS에서 aaxproxy에 의해 정의된 것이다. 당신은 나의 이전 글을 보고 이 방면의 내용을 이해할 수 있다. ExtJS 4.2 자습서 - 06: 서버 에이전트(proxy)
    PageProxy 페이지 나누기 구현
    PageProxy는 Ext.Net이 실현하는 페이지 나누기 방식으로handler를 사용하는 방식과 달리 PageProxy는 OnReadData 이벤트를 실현함으로써 페이지 나누기를 완성한다.
    Store 코드를 직접 살펴보겠습니다.
    <ext:Store runat="server" ID="storeUserInfo" PageSize="5" OnReadData="storeUserInfo_ReadData">
        <Model>
            <ext:Model ID="Model1" runat="server" IDProperty="Name" >
                <Fields>
                    <ext:ModelField Name="Name" Type="String"></ext:ModelField>
                    <ext:ModelField Name="Gender" Type="String"></ext:ModelField>
                    <ext:ModelField Name="Age" Type="Int"></ext:ModelField>
                </Fields>
            </ext:Model>
        </Model>
        <Proxy>
            <ext:PageProxy></ext:PageProxy>
        </Proxy>
    </ext:Store>

    그리고 백그라운드 코드에서storeUserInfoReadData:
    protected void storeUserInfo_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        int start = e.Start;
        int limit = e.Limit;
    
        var userInfoList = UserInfo.GetData();
        e.Total = userInfoList.Count;
    
        storeUserInfo.DataSource = userInfoList.Skip(start).Take(limit).ToList();
        storeUserInfo.DataBind();
    }

    정렬 및 필터링
    위에서 언급한 바와 같이 서버 측은 Sort와 Filter 파라미터를 얻어서sort와 Filter를 처리하여 해당하는 데이터를 얻을 수 있다.
    예를 들어 내 Filter 코드:
    var userInfoList = UserInfo.GetData();
    if (filter != null && filter.Count() > 0)
    {
        foreach (var item in filter)
        {
            userInfoList = userInfoList.FindAll(m => m.Name == item.Value);
        }
    }

    이렇게 하면 모든 일치하는 옵션을 필터할 수 있다.Sort의 코드는 비교적 복잡해서 아직 비교적 통용되는 것이 완성되지 않았기 때문에 스팸 코드는 대중에게 해를 끼치지 않을 것이다.
    본문은 이륙망원작에서 처음으로 발간하였으며, 전재는 출처를 밝혀 주십시오.
    주소: http://www.qeefee.com/article/extnet-learn-09-store-in-extnet

    좋은 웹페이지 즐겨찾기