Dbgrid CheckBox Kullanımı DataField Ptoblemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
emrekilinc1984
Üye
Mesajlar: 58
Kayıt: 15 Eyl 2016 12:13

Dbgrid CheckBox Kullanımı DataField Ptoblemi

Mesaj gönderen emrekilinc1984 »

Günaydın arkadaşlar, Benim şöyle bir problemim var ben dbgrid içinde aşağıdaki kodlarla başarlı bir şekilde checkbox oluşturuyorum fakat söyle bir sorun yaşıyorum dbgrid options ta rowselect açtığımda grid üzerinde tıkladığımda field üzerinde checkbox görünüyor ama benim tıkladığım satırdaki chechbox altında false - true diğer gerçek data da görünüyor ve chechbox altında kalıyor ben bu alanda sadece tıklasam dahi chechbox görünsün istiyorum yardımcı olursanız sevinirim.



Kod: Tümünü seç

procedure TForm1.DBCheckBox1Click(Sender: TObject);
begin

  if DBCheckBox1.Checked then
     DBCheckBox1.Caption := DBCheckBox1.ValueChecked
  else
     DBCheckBox1.Caption := DBCheckBox1.ValueUnChecked;

end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin

   if DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField then
    DBCheckBox1.Visible := False

end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
      (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
     DBCheckBox1.Left := Rect.Left + DBGrid1.Left + 2;
     DBCheckBox1.Top := Rect.Top + DBGrid1.top + 2;
     DBCheckBox1.Width := Rect.Right - Rect.Left;
     DBCheckBox1.Height := Rect.Bottom - Rect.Top;
     DBCheckBox1.Visible := True;
    end
  end
  else
  begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
      DrawRect:=Rect;
      InflateRect(DrawRect, -1, -1);
      DrawState := ISChecked[Column.Field.AsBoolean];
      DBGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect,
                       DFC_BUTTON, DrawState);
    end;
  end;
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin

  if (key = Chr(9)) then Exit;
  if (DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField) then
  begin
    DBCheckBox1.SetFocus;
    SendMessage(DBCheckBox1.Handle, WM_Char, word(Key), 0);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

 DBCheckBox1.DataSource := DataSource1;
 DBCheckBox1.DataField  := 'yetki';
 DBCheckBox1.Visible    := False;
 DBCheckBox1.Color      := DBGrid1.Color;
 DBCheckBox1.Caption    := '';

 DBCheckBox1.ValueChecked := '1';
 DBCheckBox1.ValueUnChecked := '';

end;
Cevapla