Fórum CheckBox na DBGrid - selecionando varios campos e gerando #298421
05/10/2005
0
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key in [1, 4, 22] then
begin
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
begin
{Ctrl+A}
if key = 1 then
DBGrid1.SelectedRows.CurrentRowSelected := true;
{Ctrl+D}
if key = 4 then
DBGrid1.SelectedRows.CurrentRowSelected := false;
{Ctrl+I}
if key = 22 then
DBGrid1.SelectedRows.CurrentRowSelected := not DBGrid1.SelectedRows.CurrentRowSelected;
DBGrid1.DataSource.DataSet.Next;
end;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if FileExists(ClientDataSet1.FileName) then ClientDataSet1.LoadFromFile()
else ClientDataSet1.CreateDataSet;
end;
procedure TForm1.ClientDataSet1AfterDelete(DataSet: TDataSet);
begin
ClientDataSet1.SaveToFile();
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
begin
Memo1.Clear;
With DBGrid1 do
Begin
if SelectedRows.Count > 0 then
for i := 0 to Pred(SelectedRows.Count) do
Begin
{posiciona nos registros selecionados do DBGrid}
DataSource1.Dataset.Bookmark := SelectedRows[i];
Memo1.Lines.Add(´Selecionado: ´+ClientDataSet1bairro_nome.AsString)
end;
end;
end;[color=blue:0cc65fcf24][b:0cc65fcf24]Movido de Interbase/Firebird para Delphi[/b:0cc65fcf24][/color:0cc65fcf24]
Amarildo
Curtir tópico
+ 0Posts
06/10/2005
Amarildo
Gostei + 0
06/10/2005
Marcio.theis
http://delphi.about.com/od/usedbvcl/l/aa082003a.htm
Gostei + 0
06/10/2005
Amarildo
Gostei + 0
06/10/2005
Marcio.theis
Gostei + 0
06/10/2005
Massuda
Você tem um campo na tabela para indicar que o registro vai ser impresso?
Gostei + 0
06/10/2005
Amarildo
Gostei + 0
06/10/2005
Massuda
Gostei + 0
07/10/2005
Amarildo
Gostei + 0
07/10/2005
Diogoalles
eu já havia postado um tópico com o que você quer e não consegui.
você poderia me dizer se conseguiu com o que foi passado?
como você para que o campo calculado mude de valor ao clicar no check q está no grid ?
obrigado
Diogo
Gostei + 0
07/10/2005
Amarildo
Gostei + 0
07/10/2005
Diogoalles
Do meu ponto de vista parece simples. Eu já tenho um componente de grid que exibe os campos booelan no formato check.
Você tem um TAble com um Datasource, este ligado ao DBGrid. Aí você cria um campo calculado ´check´ do tipo boolean;
Ai coloquei no Oncalcfields da tabela para check = false. Então todos os registros não estão checados.
Assim pensei numa rotina no DBGrid.OnCellClick. Se for igual a coluna ´check´ então, Table1.Check := not(Table1.Check).
Só que não funciona porque a tabela não está em edição.
Então o unico problema nessa minha idéia é saber com calcular o valor deste campo só para o registro que cliquei, fazendo ele receber conforme acima.
Está ai a ideia, de repente com a ajuda da galera conseguiremos.
o componente DBGrid com check q utilizo é do pacote TCF (www.elivaldo.com.br).
abraço
Diogo
Gostei + 0
07/10/2005
Amarildo
Gostei + 0
17/11/2005
Diogoalles
estou tentando retomar essa questão do checkbox no dbgrid para selecionar os registros ao inves de usar o ´Ctrl+clique mouse´
alguem descobriu alguma alternativa ?
alguma novidade, ideia, dica :
abraço
Diogo
Gostei + 0
17/11/2005
Will
Vamos supor que o nome do dbgrid é DBGrid1 então faça o seguinte:
- Deixe desmarcada a opção gbMultiSelect em Options do DBGrid
- Deixe marcada a opção ReadOnly
- Coloque como primeira coluna do DBGrid um campo que você não irá mostrar (no exemplo eu usei ´CODIGO´);
- no evento OnDrawDataCell coloque
[color=green:ece5d8fe96][b:ece5d8fe96]procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (Field.FieldName = ´CODIGO´) and (not (gdFixed in State)) then
begin
// Desenha um campo em branco
DBGrid1.Canvas.FillRect(Rect);
// Testa de a linha está selecionada ou não
if DBGrid1.SelectedRows.IndexOf(DBGrid1.DataSource.DataSet.Bookmark) >= 0 then
DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_CHECKED) // Desenha o CheckBox desmarcado
else
DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK); // Desenha o CheckBox marcado
end;
end;[/b:ece5d8fe96][/color:ece5d8fe96]
- no evento OnCellClick coloque
[color=green:ece5d8fe96][b:ece5d8fe96]procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
DBGrid1.SelectedRows.CurrentRowSelected := not DBGrid1.SelectedRows.CurrentRowSelected;
end;[/b:ece5d8fe96][/color:ece5d8fe96]
Caso deseje marcar somente quando clicar na coluna que for CheckBox faça o teste da coluna no OnCellClick
Gostei + 0
16/04/2006
Erivando
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)