Pergunta

Eu tenho uma tabela de dados que retorna cerca de 30.000 registros. Eu estou mostrando esses registros em um controle asp: GridView. Eu tenho um controle suspenso em que eu quero que o usuário seja capaz de selecionar o número de registros a serem exibidos na GridView. O padrão deve ser tudo, mas também pode ter valores como 20, 50, 100, por exemplo. Não tenho certeza de como fazer isso.

E se eu não tenho Paginação ligada. Vai PAGESIZE ainda trabalho?

I codificado GridView.PageSize = 1 e ainda devolveu todos os registros.

Foi útil?

Solução

Se você quiser que PageSize funciona você Have para definir AllowPaging de GridView para true. Obviamente você tem que criar o método para gerenciar a PageIndexChanging evento.

Como esta:

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

A lista suspensa pode ter o conjunto de propriedade AutoPostBack para true e em seu OnSelectedIndexChanged você deve definir

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

Outras dicas

Use a propriedade PageSize do gridview. Fazer a ligação .

Você pode adicionar o valor da pendente (20, 50, 100) à sua consulta para que você selecionar apenas a parte superior (20, 50, 100) registros.

Você vai estar usando paginação também?

paginação deve sempre ser tratada o mais cedo possível na seleção de dados. Você não deseja recuperar 30.000 registros do banco de dados para o servidor de aplicativo, em seguida, mostrar apenas 50 deles.

Algo como: (para selecionar a página 3, 50 por página)

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

Que se traduz como:

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
)

Obviamente mais cuidado terá de ser tomado em torno de classificação etc.

Aqui está o que eu faria. Em primeiro lugar, gostaria de acrescentar uma coluna à DataTable que serviria como um contador se não é já. Então, você ligar o seu GridView a um DataView. Aqui está algum código para demonstrar o que estou falando:

            //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;
            }

Em seguida, obter o modo de exibição padrão do DataTable e definir o RowFilter:

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

Finalmente, apenas ligam o GridView ao DataView diretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top