문제

약 30,000 개의 레코드를 반환하는 데이터 가능이 있습니다. ASP : GridView Control에 이러한 레코드를 표시하고 있습니다. 사용자가 GridView에 표시 할 레코드 수를 선택할 수있는 드롭 다운 컨트롤이 있습니다. 기본값은 모두 여야하지만 예를 들어 20, 50, 100과 같은 값도 가질 수도 있습니다. 어떻게 해야할지 잘 모르겠습니다.

페이징이 켜지지 않으면 어떻게해야합니까? Pagesize가 여전히 작동합니까?

나는 gridview.pagesize = 1을 하드 코딩했으며 여전히 모든 레코드를 반환했습니다.

도움이 되었습니까?

해결책

당신이 그것을 원한다면 그 pagesize가 당신을 작동시킵니다 가지다 gridview를 true로 허용하는 것을 설정합니다. 분명히 PageIndexChanging 이벤트를 관리하려면 메소드를 작성해야합니다.

이와 같이:

protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{
     myGvw.PageIndex = e.NewPageIndex;
     // then recall the method that bind myGvw
}

드롭 다운은 부동산 자동 포스트백을 True로 설정할 수 있고 그의 onselectedIndexChanged에서 설정해야합니다.

myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)

다른 팁

GridView의 Pagesize 속성을 사용하십시오. 링크.

쿼리에 드롭 다운 (20, 50, 100)의 값을 추가하여 상단 (20, 50, 100) 레코드 만 선택할 수 있습니다.

페이징도 사용할 건가요?

페이징은 항상 데이터 선택에서 가능한 한 빨리 처리해야합니다. DB에서 앱 서버로 30,000 개의 레코드를 검색하여 50 개만 표시하고 싶지 않습니다.

다음과 같은 것 : (페이지 당 50 페이지, 50 페이지 선택)

select top 50 from x where pk not in (select top 100 pk from x)

다음과 같이 번역됩니다.

CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize 
FROM x
WHERE pk NOT IN 
(
 SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)

분명히 정렬 등을 중심으로 더 많은주의를 기울여야합니다.

여기 내가 할 일이 있습니다. 먼저, 나는 아직없는 경우 카운터 역할을하는 DataTable에 열을 추가합니다. 그런 다음 GridView를 Dataview에 바인딩합니다. 다음은 내가 말하는 내용을 보여주는 코드입니다.

            //add column with counter
            table.Columns.Add("counter", typeof(int));
            for (int i = 0; i < table.Rows.Count; i++)
            {
                table.Rows[i]["counter"] = i+1;
            }

그런 다음 DataTable에서 기본보기를 가져 와서 RowFilter를 설정하십시오.

            DataView view = table.DefaultView;
            view.RowFilter = "counter <= 100"; //or whatever number the user selected

마지막으로 GridView를 Dataview에 직접 바인딩하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top