페이지를 넘긴 후에도 계속 정렬하려면 다음과 같은 효과를 얻습니다.
예를 들어 총 15개의 레코드가 있고 각 페이지에 10개의 레코드가 표시됩니다
. 정렬 시: 처음 10개의 레코드가 첫 번째 페이지에 정렬되고 다음 5개의 레코드가 정렬됩니다. 두 번째 페이지를 넘길 때 별도로 정렬됩니다.
1.
데이터가 많은 경우에는 데이터 세트를 캐시(viewstate)에 넣지 않는 것이 좋습니다. 이는 성능에 영향을 미칩니다
. ViewState는 마지막 e.expression과 e.expression이 오름차순인지 내림차순인지를 저장합니다.
예는 다음과 같습니다.
1.기존
정렬 이벤트는 위의 정렬 제목을 클릭할 때 사용됩니다.
grdProjTrace_SortCommand(개체 소스, DataGridSortCommandEventArgs e)
{
this.grdProjTrace.CurrentPageIndex = 0;
DataView dv = 데이터 코드 가져오기;
문자열 strSort = "";
string strOrder = ""; // 정렬 방법. 0, 내림차순, 1 오름차순 if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(e.SortExpression == "고객 이름")
{
if(strSort != "고객이름")
{
this.ViewState["SortExpresstion"] = ustomerName0";
dv.Sort = "고객 이름 DESC";
}
또 다른
{
if(strOrder == "0")
{
this.ViewState["SortExpresstion"] = "CustomerName1";
dv.Sort = "고객 이름 ASC";
}
또 다른
{
this.ViewState["SortExpresstion"] = "CustomerName0";
dv.Sort = "고객 이름 DESC";
}
}
}
if(e.SortExpression == "fullName")
{
if(strSort != "전체 이름")
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "fullName DESC";
}
또 다른
{
if(strOrder == "0")
{
this.ViewState["SortExpresstion"] = "fullName1";
dv.Sort = "fullName ASC";
}
또 다른
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "fullName DESC";
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
2. 다음 메소드는 제가 직접 작성한 것이며, 페이지 넘김 이벤트에서 호출됩니다.
개인 무효 ChangePageDataBind()
{
DataView dv = 데이터 코드 가져오기;
문자열 strSort = "";
string strOrder = ""; // 정렬 방법. 0, 내림차순, 1 오름차순 if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == "고객 이름")
{
if(strOrder == "1")
{
this.ViewState["SortExpresstion"] = "CustomerName1";
dv.Sort = "고객 이름 ASC";
}
또 다른
{
this.ViewState["SortExpresstion"] = "CustomerName0";
dv.Sort = "고객 이름 DESC";
}
}
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == "전체 이름")
{
if(strOrder == "1")
{
this.ViewState["SortExpresstion"] = "fullName1";
dv.Sort = "fullName ASC";
}
또 다른
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "fullName DESC";
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
위 두 메소드는 정렬할 필드의 이름만 수정하면 바로 호출이 가능합니다.
1. 메소드는 매우 간단하고 실용적이므로 여기서는 다루지 않겠습니다.
2. 메소드는 다음과 같이 사용됩니다:
private void grdProjTrace_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
노력하다
{
노력하다
{
this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
}
잡다
{
this.grdProjTrace.CurrentPageIndex = 0;
}
this.ChangePageDataBind();
}
캐치(System.Exception errWS)
{
//이상}
}