PDA

Ver la Versión Completa : DBgrid con checks como ?


Coco_jac
02-12-2005, 18:36:13
Hola amigos del foro como podria mostrar check en una columna del DBGrid de manera que podria activarlo o no..........
Acabo e ver post relacionados , pero a diferencia de esto no tengo campos booleanos , sino que deseo tener check en una columna de manera que al seleccionrlos me permitiria borrar el registro o registros, se que e puede hacer de otra manara mas facil pero me lo solicitan asi.

Espero sus comentarios...........

Delfino
02-12-2005, 19:32:58
intenta esto, teniendo una imagelist con dos bitmaps, una para el estado cheked y otra para el unchecked, el evento es el OnDrawColumnCell:

if Column.Field = campo then
begin
DBGrid1.Canvas.FillRect(Rect);
if campo.value = 0 then //unchecked condition
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,0)
else //checked condition
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,1);
end;

Casimiro Notevi
02-12-2005, 19:55:22
Añade un campo calculado y que sea éste el que conviertas en un checkbox, como te indica Delfino

el_barto
02-12-2005, 21:02:08
este problema me aquejo hace ya un tiempo, y esta explicado aqui:

http://www.clubdelphi.com/foros/showthread.php?t=12672&page=1&pp=20&highlight=dbgrid+check

ademas agregaria esto :

dbgrid1.SelectedIndex:=cualquiera;

para que el efecto del click sea mas original aun.

amadis
27-04-2012, 00:31:00
Alguien probò esto de los bitmaps?

Parece simple y muy estetico pero no pude hacerlo funcionar.


if Column.Field = campo then
begin
DBGrid1.Canvas.FillRect(Rect);
if campo.value = 0 then //unchecked condition
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,0)
else //checked condition
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,1);
end;

amadis
04-05-2012, 02:20:04
Nadie lo ha probado?

Neftali no estas por ahi con tu sabidurìa como para dar opinión al respecto?

Saludos a todos

Casimiro Notevi
04-05-2012, 02:27:34
¿Te refieres a pintar los checkbox cargando una pequeña imagen?. sí, es algo habitual, lo hago normalmente así:

procedure TFempresas.grUsuaDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin // pintar los checkbox
if AnsiLowerCase(Column.Field.FieldName) = _acceso_ then
begin
(Sender As TDBGrid).Canvas.FillRect( Rect );
imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,0);
if Column.Field.Value=1 then
imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,2)
else
imglst2.Draw((Sender As TDBGrid).Canvas,Rect.Left+10,Rect.Top+1,0{1}); // 0.en blanco 1.no 2.si
end;
end;

ecfisa
04-05-2012, 04:20:48
Hola.

Yo utilizo algo parecido a:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
B: TBitmap;
R: TRect;
begin
if Column.FieldName = 'CampoDelBitmap' then
begin
TDBGrid(Sender).Canvas.FillRect(Rect);
B:= TBitmap.Create;
try
ImageList1.GetBitMap(TDBGrid(Sender).DataSource.DataSet.FieldByName('Opcion').AsInteger + 1, B);
B.Width:= Rect.Right - Rect.Left;
B.Height:=Rect.Bottom - Rect.Top;
DBGrid1.Canvas.StretchDraw(Rect, B);
finally
B.Free;
end;
R:= Rect;
R.Left := R.Left + R.Bottom - R.Top;
DBGrid1.DefaultDrawColumnCell(R, DataCol, Column, State);
end;
end;

Permite el usar varias imágenes para distintos valores, pero el código de Casimiro realmente es mucho más simple... (y ya me lo copié :))

Saludos.

Casimiro Notevi
04-05-2012, 10:16:26
(y ya me lo copié :))
¿Y mis derechos de autor?, espera que recuerde... ah, no, si yo también lo copié :D

olbeup
04-05-2012, 13:35:52
Yo también lo hacia cómo ecfisa pero el tuyo casimiro notevi, es más corto y no hay que crear ni destruir ningún Objecto, no te acostaras sin saber algo más.

Perdón pero yo también me lo he copiado. :D:D

Un saludo.

Casimiro Notevi
04-05-2012, 13:40:25
Perdón pero yo también me lo he copiado.

¡Copiad, malditos! (http://www.rtve.es/alacarta/videos/el-documental/copiad-copiad-malditos-codecmaster-web-169/1075737/) :)

amadis
04-05-2012, 15:23:42
Justamente buscaba lograr eso...

Copio a casimiro.