드롭 다운을 기반으로 GridView에서 결과 수를 표시합니까?
문제
약 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에 직접 바인딩하십시오.