Buenas, comento un poco mi proyecto, ya que hace días vengo interviniendo en el foro y jamás lo expliqué en detalle.
Para mi primer aplicación en Lazarus, estoy desarrollando una aplicación para gestionar mi videoteca.
Ya tengo el modelo entidad relación de mi DB, y ya esta creada. Mi consulta es la siguiente:
A priori tengo un DBGRid donde muestro los siguientes campos: id - titulo - duración - estado (optimo,dañado,extraviado,prestado).
Pero, me gustaría expander esta tabla con los siguientes aspectos:
1) Un Checkbox en cada fila, donde al seleccionar un o varios, y apretar el botón borrar se le pase a una Query los ids de los videos a borrar.
2) A su vez, mi DB soporta la información sobre audio y subtítulo de un video. Solamente Inglés y Español. Me gustaría agregarle a mi tabla 2 campos nuevos, subtitulo y audio. En las cuales muestro banderas de los lenguajes que contenga.
Sobre el inciso 1, he leído algo googleando pero no con mucho detalle, sobre el 2 estoy en la nada !.
Agradecería cualquier tipo de ayuda !.
Saludos.

DBGrid customizada
Comenzado por
ramiro_md
, jul 13 2012 05:49
8 respuestas en este tema
#1
Escrito 13 julio 2012 - 05:49
#2
Escrito 14 julio 2012 - 09:21
1- cada columna tiene una propiedad que se llama ButtonStyle, lo pones en cbsCheckboxColumn y ya tienes un checkbox en cada columna.
2-misma propiedad anterior, sólo que la cambias a cbsPickList, adicionalmente hay otra propiedad llamada PickList, allí llenas lo que quieres que salga.
Espero te sirva.
Saludos.
2-misma propiedad anterior, sólo que la cambias a cbsPickList, adicionalmente hay otra propiedad llamada PickList, allí llenas lo que quieres que salga.
Espero te sirva.
Saludos.
#3
Escrito 14 julio 2012 - 03:51
#4
Escrito 14 julio 2012 - 04:48
Para el checkbox de "borrar" puedes utilizar un campo calculado, con los tips que te dieron anteriormente para mostrar el checkbox, una vez que tienes el campo calculado, recorres el dataset para ver los id's y generar la consulta de borrado y refrescar el dataset
#5
Escrito 14 julio 2012 - 05:21
Gracias por los tips, recién ahora me puedo sentar a verlos.
Ya sabrán mis resultados.
Saludos.
Ya sabrán mis resultados.
Saludos.
#6
Escrito 14 julio 2012 - 05:47
Bueno, para obtener la columna de Checkboxs, aproveche un procedure que había definido para el evento DBGrid1DrawColumnCell.
Y coloqué este código:
Les comento que tuve que agregar una columna a la consulta SQL, llamada "chkBx", que solo contiene el id del video.
El único problema a todo esto es que no me deja tildar/destildar los checks.
Algun comentario ?.
Saludos.
Edito: dejo un screen.

Y coloqué este código:
delphi
if (Column.FieldName = 'chkBx') then begin Column.ButtonStyle:= cbsCheckboxColumn; end;
Les comento que tuve que agregar una columna a la consulta SQL, llamada "chkBx", que solo contiene el id del video.
El único problema a todo esto es que no me deja tildar/destildar los checks.
Algun comentario ?.
Saludos.
Edito: dejo un screen.

#7
Escrito 15 julio 2012 - 10:34
Para que esto sea posible en la propiedad options del DBGrid, debes poner en true la propiedad Editable, además, puedes usar un TImageList para poner imágenes en el DBGrid, que no había entendido bien la pregunta 2, sólo debes asociar el TImageList al DBGrid y a la columna especificar que imagen mostrar.
Saludos.
Saludos.
#8
Escrito 15 julio 2012 - 11:44
En el evento DrawColumnCell coloqué esto:
La propiedad ReadOnly la puse a true, no encontré la propiedad "Editable".
De todas formas me sigue sin dejar tildar/destildar los Checkboxes.
Saludos.
delphi
VideoGrid.EditorMode := true;
La propiedad ReadOnly la puse a true, no encontré la propiedad "Editable".
De todas formas me sigue sin dejar tildar/destildar los Checkboxes.
Saludos.
#9
Escrito 15 julio 2012 - 01:47
Bueno, el inciso 1 no lo solucioné con los Checkboxes, sino "leyendo" las filas seleccionadas de la tabla de este modo:
Tengo un botón para eliminar campos y el evento onClick responde a lo siguiente:
Lo único que me faltaría es pasar el array de id a un procedure que haga la baja en la db y estaría cumplido ese requerimiento.
Todavía tengo que ver lo de las banderitas je.
Saludos.
Tengo un botón para eliminar campos y el evento onClick responde a lo siguiente:
delphi
var i: Integer; sum : Single; aux : String; arry : Array [0..255] of String; begin { Si no hay filas seleccionadas tiro un alert } if VideoGrid.SelectedRows.Count = 0 then ShowMessage('Debes seleccionar uno o más videos.') else begin { Sino, las recorro y guardo el valor del campo ID en un array } sum := 0; with VideoGrid.DataSource.DataSet do begin for i := 0 to VideoGrid.SelectedRows.Count-1 do begin GotoBookmark(Tbookmark(VideoGrid.SelectedRows[i])); aux := VideoGrid.columns[1].Field.AsString; arry[i] := aux; end; end; { Mensaje de validación de baja } botones := [mbNoToAll,mbYesToAll]; if MessageDlg('Confirmar borrado','¿Estas seguro que quiere eliminar los videos?', mtWarning, [mbYes, mbNo],0) = mrYes then begin ShowMessage('Eliminados'); end; end;
Lo único que me faltaría es pasar el array de id a un procedure que haga la baja en la db y estaría cumplido ese requerimiento.
Todavía tengo que ver lo de las banderitas je.
Saludos.