segunda-feira, 1 de setembro de 2008

Artigo Nº 03: Exibir um somatório no rodapé da datagrid

Bom... No meu primeiro post estarei disponibilizando um tutorial de como exibir o somatório de um campo do banco de dados no rodapé de uma DATAGRID, como por exemplo um campo salário. Para começo deve-se criar uma função do tipo String por exemplo : Soma : String; E nela adicionar o seguinte os comandos para realizar uma função de consulta com um command no nosso caso bdpComman e nele especificar a conexão que será utilizada para acessar o banco de dados. Segue-se o código.


bdpCom := BdpCommand.Create('SELECT SUM(HORAS) AS FEITAS FROM HORAS WHERE BOLSA = ?', Dados.CONEXAO);
try
bdpCom.Parameters.clear; // Limpa os parâmetros.
bdpCom.Parameters.Add('BOLSA', BdpType.&String); //Adiciona um parâmetro.
//====================================
bdpCom.Parameters['BOLSA'].Value := BOLSA; //Da um valor para o parâmetro criado.
bdpRead :=bdpCom.ExecuteReader;

if bdpRead.read then//Se o reader tiver algo nele, retorna o seu valor se não retorna 0.
Result := bdpRead['FEITAS'].ToString
else
Result := '0';
finally
bdpCom.free; // Libera da memória
bdpRead.free;
end;

Onde o deve-se utilizar o comando ExecuteReader do bdpCommand no componente bdpRead, e após isto uma simples verificação para ver se retornou algo da consulta onde foi realizada um SUM(CAMPO), sempre é claro lembrando de liberar da memória os componentes (após o finally). E retornando no Result a variavel dbpRead[‘FEITAS’] que é o nosso dbpReader. Após isto, vá na DataGrid e habilite a opção ShowFooter para exibir o rodapé. Agora adicione o evento ItemDataBound na DataGrid para que quando esteja sendo desenhado cada linha ele efetue o comando desejado.

Neste evento deve-se adicionar o seguinte comando:


if e.Item.ItemType = ListItemType.Footer then
// Se estiver no rodapé executa
e.Item.Cells[7].Text := Soma (Session['BOLSA'].ToString);


Primeiro se verifica se na hora de desenhar ele esta no rodapé, se sim ele joga para a coluna 7 o valor retornado pela nossa função, abaixo esta a foto do resultado final, é claro que o resto dos campos espera-se que sejam criados manualmente, alias uma ultima coisa.... Isto não funcionará caso exista paginação na datagrid pois na função ele trás logo o total e não o total das linhas que estão aparecendo.

Bom, creio que seja isto.... Até mais!

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!!

Artigo Nº 01: Estilo para deixar um texto na vertical em uma célula

Aqui vai um estilo para deixar o seu texto de uma célula da tabela no sentido vertical. Copie o código seguinte e cole no seu arquivo de estilo (CSS);

.textovertical
{writing-mode: tb-rl;
filter: flipv fliph;
font-size: 9pt;
font-family:Arial,Helvetica;
color:#330066;
}




Depois clique dentro da célula que desejas aplicar o estilo e na propriedade css escreva o nome do estilo(textovertical). Pronto, só executar.

Valeu! E que esse código seja útil para você.