DBgrid com CheckBox

08/04/2003

0

Pessoal,

Preciso de uma espécie de checkbox integrada com um DBgrid. Não para campos boleanos, mas para indicar que aquela tupla (registro) foi selecionado, como no programa de gerenciamento de dados do mysql, o MySQL-Front.

Por exemplo:
Fiz uma consulta num Query que retornou 5 registros. Eu quero a opção de selecionar quais registros serão excluídos, por exemplo, sem ter que utilizar seleção múltipla de linha, usando para isso um checkbox.

Obrigado,
Maicon


Maicon

Maicon

Responder

Posts

08/04/2003

Anonymous

O codigo abaixo é de um componente DBGric com checkBox

unit CheckDBGrid;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DB, DBGrids;

type
TCheckColumn = class(TColumn)
private
FCheck: Boolean;
FValueChecked: String;
FValueUnChecked: String;
procedure SetCheck(const Value: boolean);
procedure SetValueChecked(const Value: string);
procedure SetValueUnchecked(const Value: string);
public
constructor Create(Collection: TCollection); override;
published
property Check: Boolean read FCheck write SetCheck default false;
property ValueChecked: String read FValueChecked write SetValueChecked;
property ValueUnchecked: String read FValueUnchecked write SetValueUnchecked;
end;

TCheckDBGrid = class(TDBGrid)
private
Editing :Boolean;
FAllowAppend: Boolean;
OriginalOptions: TDBGridOptions;
function ValueMatch(const ValueList, Value: string): Boolean;
procedure SaveBoolean;
protected
function CreateColumns: TDBGridColumns; override;
protected
procedure CellClick(Column: TColumn); override;
procedure ColEnter; override;
procedure ColExit; override;
procedure DoEnter; override;
Procedure DoExit; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); override;
published
property AllowAppend: Boolean read FAllowAppend write FAllowAppend default True;
end;

procedure Register;

implementation

constructor TCheckColumn.Create(Collection: TCollection);
begin
inherited;
FValueChecked:=´T´;
FValueUnchecked:=´F´;
end;

procedure TCheckColumn.SetCheck(const Value: boolean);
begin
FCheck:=Value;
Changed(False);
end;

procedure TCheckColumn.SetValueChecked(const Value: string);
begin
FValueChecked:=Value;
Changed(False);
end;

procedure TCheckColumn.SetValueUnchecked(const Value: string);
begin
FValueUnchecked:=Value;
Changed(False);
end;

function TCheckDBGrid.ValueMatch(const ValueList, Value: string): Boolean;
var Pos: Integer;
begin
Result := False;
Pos := 1;
while Pos <= Length(ValueList) do
if AnsiCompareText(ExtractFieldName(ValueList, Pos), Value) = 0 then
begin
Result := True;
Break;
end;
end;

function TCheckDBGrid.CreateColumns: TDBGridColumns;
begin
Result := TDBGridColumns.Create(Self, TCheckColumn);
end;

procedure TCheckDBGrid.SaveBoolean;
var column :TCheckColumn;
pos :integer;
begin
column:=TCheckColumn(Columns[SelectedIndex]);
if not column.ReadOnly then begin
SelectedField.Dataset.Edit;
if SelectedField.DataType=ftBoolean then
SelectedField.AsBoolean:=not SelectedField.AsBoolean
else begin
pos:=1;
if ValueMatch(column.ValueChecked, SelectedField.AsString) then
SelectedField.AsString:=ExtractFieldName(column.ValueUnchecked,pos)
else
SelectedField.AsString:=ExtractFieldName(column.ValueChecked,pos);
end;
SelectedField.Dataset.Post;
end;
inherited;
end;

procedure TCheckDBGrid.CellClick(Column: TColumn);
begin
if TCheckColumn(Column).Check then SaveBoolean;
inherited;
end;

procedure TCheckDBGrid.ColEnter;
begin
if TCheckColumn(Columns[SelectedIndex]).Check then begin
Editing:=dgEditing in Options;
Options:=Options-[dgEditing];
end;
inherited;
end;

procedure TCheckDBGrid.DoEnter;
begin
if TCheckColumn(Columns[SelectedIndex]).Check then begin
Editing:=dgEditing in Options;
Options:=Options-[dgEditing];
end;
inherited;
end;

procedure TCheckDBGrid.ColExit;
begin
if (TCheckColumn(Columns[SelectedIndex]).Check)and Editing then
Options:=Options+[dgEditing];
inherited;
end;

procedure TCheckDBGrid.DoExit;
begin
if (TCheckColumn(Columns[SelectedIndex]).Check)and Editing then
Options:=Options+[dgEditing];
inherited;
end;

procedure TCheckDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if (Key=VK_SPACE)and TCheckColumn(Columns[SelectedIndex]).Check then SaveBoolean;
if (not FAllowAppend)and(DataLink.DataSet.eof)and(Key=VK_DOWN) then begin
Key:=0;
DataLink.DataSet.Cancel;
end;
end;

procedure TCheckDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
const CtrlState :array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
inherited;
if TCheckColumn(Column).Check then begin
Canvas.FillRect(Rect);
DrawFrameControl(Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]);
end;
end;

procedure Register;
begin
RegisterComponents(´CheckGrids´, [TCheckDBGrid]);
end;

end. :P


Responder

09/04/2003

Dor_poa

Olha.. checBox eu não sei, mas combo eu sei..
Siga o passo-a-passo abaixo :
1. insira um Datasource, um DBGrid e dois Table´s no form
2. link o Table1 com Datasource1 e DBGrid1
3. defina um banco de dados, uma tabela e ative o Table1
4. defina também para o Table2, mas use uma tabela diferente
5. adicione todos os campos do Table1 através do Fields Editor
6. mude a propriedade Visble para False do campo do Combobox
7. dê um clique com o botão direito do mouse sobre o Fields Editor e escolha New Field...
8. especifique os parametros para o novo campo
a) Name: <algum nome>
b) Type: <tipo do campo>
c) Size: <tamanho>
d) Field type: Lookup
e) Key Field: <campo que receberá o valor escolhido no combobox&
f) DataSet: Table2
g) LookUpKeys: <campo listado no combo>
h) Result Field: <campo que será mostrado para o usuário no Combobox>
9. Execute a aplicação.


Responder

09/04/2003

Anonymous

Mutíssimo Obrigado!

O codigo abaixo é de um componente DBGric com checkBox unit CheckDBGrid; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DB, DBGrids; type TCheckColumn = class(TColumn) private FCheck: Boolean; FValueChecked: String; FValueUnChecked: String; procedure SetCheck(const Value: boolean); procedure SetValueChecked(const Value: string); procedure SetValueUnchecked(const Value: string); public constructor Create(Collection: TCollection); override; published property Check: Boolean read FCheck write SetCheck default false; property ValueChecked: String read FValueChecked write SetValueChecked; property ValueUnchecked: String read FValueUnchecked write SetValueUnchecked; end; TCheckDBGrid = class(TDBGrid) private Editing :Boolean; FAllowAppend: Boolean; OriginalOptions: TDBGridOptions; function ValueMatch(const ValueList, Value: string): Boolean; procedure SaveBoolean; protected function CreateColumns: TDBGridColumns; override; protected procedure CellClick(Column: TColumn); override; procedure ColEnter; override; procedure ColExit; override; procedure DoEnter; override; Procedure DoExit; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); override; published property AllowAppend: Boolean read FAllowAppend write FAllowAppend default True; end; procedure Register; implementation constructor TCheckColumn.Create(Collection: TCollection); begin inherited; FValueChecked:=´T´; FValueUnchecked:=´F´; end; procedure TCheckColumn.SetCheck(const Value: boolean); begin FCheck:=Value; Changed(False); end; procedure TCheckColumn.SetValueChecked(const Value: string); begin FValueChecked:=Value; Changed(False); end; procedure TCheckColumn.SetValueUnchecked(const Value: string); begin FValueUnchecked:=Value; Changed(False); end; function TCheckDBGrid.ValueMatch(const ValueList, Value: string): Boolean; var Pos: Integer; begin Result := False; Pos := 1; while Pos <= Length(ValueList) do if AnsiCompareText(ExtractFieldName(ValueList, Pos), Value) = 0 then begin Result := True; Break; end; end; function TCheckDBGrid.CreateColumns: TDBGridColumns; begin Result := TDBGridColumns.Create(Self, TCheckColumn); end; procedure TCheckDBGrid.SaveBoolean; var column :TCheckColumn; pos :integer; begin column:=TCheckColumn(Columns[SelectedIndex]); if not column.ReadOnly then begin SelectedField.Dataset.Edit; if SelectedField.DataType=ftBoolean then SelectedField.AsBoolean:=not SelectedField.AsBoolean else begin pos:=1; if ValueMatch(column.ValueChecked, SelectedField.AsString) then SelectedField.AsString:=ExtractFieldName(column.ValueUnchecked,pos) else SelectedField.AsString:=ExtractFieldName(column.ValueChecked,pos); end; SelectedField.Dataset.Post; end; inherited; end; procedure TCheckDBGrid.CellClick(Column: TColumn); begin if TCheckColumn(Column).Check then SaveBoolean; inherited; end; procedure TCheckDBGrid.ColEnter; begin if TCheckColumn(Columns[SelectedIndex]).Check then begin Editing:=dgEditing in Options; Options:=Options-[dgEditing]; end; inherited; end; procedure TCheckDBGrid.DoEnter; begin if TCheckColumn(Columns[SelectedIndex]).Check then begin Editing:=dgEditing in Options; Options:=Options-[dgEditing]; end; inherited; end; procedure TCheckDBGrid.ColExit; begin if (TCheckColumn(Columns[SelectedIndex]).Check)and Editing then Options:=Options+[dgEditing]; inherited; end; procedure TCheckDBGrid.DoExit; begin if (TCheckColumn(Columns[SelectedIndex]).Check)and Editing then Options:=Options+[dgEditing]; inherited; end; procedure TCheckDBGrid.KeyDown(var Key: Word; Shift: TShiftState); begin inherited; if (Key=VK_SPACE)and TCheckColumn(Columns[SelectedIndex]).Check then SaveBoolean; if (not FAllowAppend)and(DataLink.DataSet.eof)and(Key=VK_DOWN) then begin Key:=0; DataLink.DataSet.Cancel; end; end; procedure TCheckDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const CtrlState :array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin inherited; if TCheckColumn(Column).Check then begin Canvas.FillRect(Rect); DrawFrameControl(Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]); end; end; procedure Register; begin RegisterComponents(´CheckGrids´, [TCheckDBGrid]); end; end. :P



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar