Mostrar número de resultados em gridview com base em suspenso?
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.
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.