Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcio Jorge

Sort e Paging no GridView após FilterExpression não funciona

Recommended Posts

Olá,

 

estou iniciando no ASP.NET e comecei a testar algumas coisas.

 

Obs:

. estou tentando montar o grid pelo código e não pela toolbox.

. estou usando ajax-enabled website

. estou usando accessdatasource

 

Primeiramente, monto meu grid no .aspx:

 

<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/banco.mdb"></asp:AccessDataSource>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
										<ContentTemplate>
											<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
											<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
												<asp:View ID="ViewCliente" runat="server">
													<asp:GridView ID="GridViewCliente" runat="server" Width="100%"></asp:GridView>
												</asp:View>
											</asp:MultiView>
										</ContentTemplate>
									</asp:UpdatePanel>

 

Após, crio minha função de filtro genérica para poder usar em outras tabelas e a atribuo ao textbox:

 

private void filtraGrid(AccessDataSource datasource, GridView grid, string filtro)
	{
		datasource.FilterExpression = "nome like '%" + filtro + "%'";
		grid.DataBind();
	}

protected void TextBox1_TextChanged(object sender, EventArgs e)
	{
		filtraGrid(AccessDataSource1,GridViewCliente,TextBox1.Text);
	}

Minha Page_Load:

 

protected void Page_Load(object sender, EventArgs e)
	{
		AccessDataSource1.SelectCommand = "select id_cliente,nome,contato,tel,email from CLIENTE order by NOME,CONTATO";
		AccessDataSource1.DeleteCommand = "delete from CLIENTE where ID_CLIENTE = @id_cliente";
		AccessDataSource1.InsertCommand = "insert into CLIENTE (nome) values ('"+ TextBox1.Text +"')";
		AccessDataSource1.FilterExpression = "";
		
		MontaGridview(GridViewCliente, "ID,Nome,Contato,Tel,E-mail", "id_cliente,nome,contato,tel,email", "id_cliente");

		GridViewCliente.DataSourceID = "AccessDataSource1";

	}

e a função de montagridview:

 

public void MontaGridview(GridView grid, string campos, string valores, string datakeynames)
	{
		//limpa o grid
		grid.Columns.Clear();

		//da split nos campos e valores
		char[] splitter = new char[] { ',' };
		string[] campo = campos.Split(splitter);
		string[] valor = valores.Split(splitter);
		//define o datakeyname
		string[] datakeyname = new string[] { datakeynames };
		
		//adiciona as colunas no grid
		for (int t = 0; t < campo.Length; t++)
		{
			BoundField coluna = new BoundField();
			coluna.HeaderText = campo[t];
			coluna.DataField = valor[t];
			coluna.SortExpression = valor[t];
			if(datakeynames == valor[t])
			{
				coluna.InsertVisible = false;
				coluna.ReadOnly = true;
			}
			grid.Columns.Add(coluna);
		}
		
		//cria a coluna de delete
		CommandField delete = new CommandField();
		delete.DeleteImageUrl = "~/icons/delete.gif";
		delete.ButtonType = ButtonType.Image;
		delete.DeleteText = "Del";
		delete.ShowDeleteButton = true;
		grid.Columns.Add(delete);

		//define o key do grid
		grid.DataKeyNames = datakeyname;

		//define estilos
		grid.FooterStyle.BackColor = corHtml("#5D7B9D");
		grid.FooterStyle.Font.Bold = true;
		grid.FooterStyle.ForeColor = corHtml("#FFFFFF");
		grid.RowStyle.BackColor = corHtml("#F7F6F3");
		grid.RowStyle.ForeColor = corHtml("#333333");
		grid.EditRowStyle.BackColor = corHtml("#999999");
		grid.SelectedRowStyle.BackColor = corHtml("#E2DED6");
		grid.SelectedRowStyle.Font.Bold = true;
		grid.SelectedRowStyle.ForeColor = corHtml("#333333");
		grid.PagerStyle.BackColor = corHtml("#284775");
		grid.PagerStyle.ForeColor = corHtml("#FFFFFF");
		grid.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
		grid.HeaderStyle.BackColor = corHtml("#5D7B9D");
		grid.HeaderStyle.Font.Bold = true;
		grid.HeaderStyle.ForeColor = corHtml("#FFFFFF");
		grid.AlternatingRowStyle.BackColor = corHtml("#FFFFFF");
		grid.AlternatingRowStyle.ForeColor = corHtml("#284775");
		grid.ForeColor = corHtml("#333333");
		grid.CellPadding = 4;

		//define configurações padrões
		grid.AllowPaging = true;
		grid.AllowSorting = true;
		grid.AutoGenerateColumns = false;
		grid.GridLines = GridLines.None;
		grid.PageSize = 20;
		grid.EmptyDataText = " ";
		grid.EnableSortingAndPagingCallbacks = true;
	}

e a função de cor:

 

public Color corHtml(string cor)
	{
		Color corcolor = ColorTranslator.FromHtml(cor);
		return corcolor;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não encontrei onde você criou os eventos Sorting e PageIndexChanging.

No seu código HTML, onde você monta a grid, você deve adicionar:

<asp:GridView ID="GridViewCliente" runat="server" Width="100%" OnPageIndexChanging="GridViewCliente_PageIndexChanging" OnSorting="GridViewCliente_Sorting"></asp:GridView>

 

Não se esqueça também de setar as propriedades: AllowPaging="true" e AllowSorting="true"

No seu código, você deve criar seus dois eventos:

Sorting:

protected void GridViewCliente_Sorting(object sender, GridViewSortEventArgs e)
{
  //Aqui vai seu código, para você pegar o campo onde o usuário clicou é: e.SortExpression
}
PageIndexChanging:

protected void GridViewCliente_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
   GridViewCliente.PageIndex = e.NewPageIndex;
   GridViewCliente.DataBind();
}

Espero ter ajudado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aproveitando que a mesma dúvida está aqui, eu fiz como orientou quintelab, porém ele nem aparece linkado o título da grid para clicar, e qdo clico não faz nada... Porém o paging está funcionando numa boa, exceto o Sorting.

 

Alguém imagina o pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.