segunda-feira, 1 de setembro de 2008

Artigo Nº 02: GridView em DELPHI .NET

Olá a todos!

Este tutorial é sobre GridView em RAD Studio .NET, ASP.NET.

- Adicionar Colunas em Tempo de Execução

Em alguns casos é necessário adicionar colunas em tempo de execução em uma GridView, isso pode ser feito adicionando um código parecido com este no evento que desejar:

var
CAMPO1, CAMPO2, CAMPO3, CAMPO4 : BoundField;
begin
  CAMPO1 := BoundField.Create;
  CAMPO2 := BoundField.Create;
  CAMPO3 := BoundField.Create;
  CAMPO4 := BoundField.Create;
  try
    CAMPO1.HeaderText := 'Código';
    CAMPO1.DataField := 'CODIGO';
    CAMPO2.HeaderText := 'Nome';
    CAMPO2.DataField := 'NOME';
    CAMPO3.HeaderText := 'Idade';
    CAMPO3.DataField := 'IDADE';
    CAMPO4.HeaderText := 'Telefone';
    CAMPO4.DataField := 'TELEFONE';
    GridView1.Columns.Insert(0,CAMPO1);
    GridView1.Columns.Insert(1,CAMPO2);
    GridView1.Columns.Insert(2,CAMPO3);
    GridView1.Columns.Insert(3,CAMPO4);
  finally
    CAMPO1.Free;
    CAMPO2.Free;
    CAMPO3.Free;
    CAMPO4.Free;
  end;
end;

Obs: Pode ser adicionado outros tipos de colunas também como ButtonColumn e definir outras propriedades.

- Recuperar Valores

Tive alguns problemas para recuperar os valores de uma gridview no começo porque quando você define que a coluna código, por exemplo, é visible=false, ele não permite pegar o conteúdo daquela coluna facilmente, mas com DataKeys é tranquilo, os códigos abaixo:
GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Item[0].ToString;

ou
GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Values[0].ToString;

Na gridview precisa ser preenchido a propriedade DataKeysNames, pode ir direto no código ou configurar na paleta propriedades mesmo, coloque o nome do campo que busca no BD, se quiser pode colocar mais de um(array), desde que separe com vírgula, se colocar mais de um, muda o valor -> Values[array], por exemplo, se quiser pegar o valor NOME, ficaria assim:

Ex: datakeynames="CODIGO, NOME"
//pega o código
GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Values[0].ToString; 
//pega o nome
GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Values[1].ToString; 

O evento para pegar os valores é o RowCommand, fica no mesmo estilo que datagrid, coloca um buttonfield e atribui um commandname pra ele, no evento rowcommand pode-se implementar um codigo parecido com esse:
if e.CommandName = 'EXCLUIR' then
begin
lblcontrole.text := GrVwComponentes.DataKeys[Convert.ToInt32(e.CommandArgument)].Values[0].ToString;
Excluir;
end;


Qualquer dúvida postem ai!!

6 comentários:

Andreza disse...

Olá você poderia me ajudar com a paginação no gridview?
eu estou marcando em alowpager = true
e não funciona, gera o seguinte erro :
"The data source does not support server-side data paging."

você poderia me ajudar a resolver este problema???

Bolívar disse...

Olá ANDREZA,

Após setar a propriedade AllowPager = True é preciso adicionar no evento PageIndexChanging da sua gridview o seguinte código:

gridview.PageIndex := e.NewPageIndex;
gridview.databind;

Se isso não resolver talvez seja porque você está usando DataReader, tente usar DataSet ou armazenar os dados em uma tabela antes de passar para o Grid.

Espero ter ajudado.

Alguns links com soluções para este problema:

http://geeksnet.blogspot.com/2008/09/exemplo-de-paginao.html

http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=1918227&SiteID=21

signori http://blogsignori.blogspot.com disse...

Show de bola, Bufo uns código.. hehe

muito útil!

flw

mvs disse...

Olá! Você save me dizer se tem como fixar o tamanho do Datagrid no Delphi 8 .NET?

Obrigado

Bolívar disse...

Olá Márcio, não tenho certeza de como fazer isso no Delphi 8 porque não cheguei a usar esta versão, pulei da 7 para 2007... acredito que o DataGrid deva ter a propriedade "width" (Largura) onde você pode definir em % ou px, só da uma procurada que você encontra, ou coloca direto no código mesmo...

Flws

Marcelo Lima disse...

Alow amigo... sou novo na área. Sabes dizer como faço para usar parâmetros no SelectQuery do SqlDataSource? Fiz uma app bem pequena. Quando clico no botão dou um SELECT em uma tabela, mas o grid nunca aparece, simplesmente fica em branco.