Ir al contenido


Foto

DBGrid customizada


  • Por favor identifícate para responder
8 respuestas en este tema

#1 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

Escrito 13 julio 2012 - 05:49

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.
  • 0

#2 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

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.
  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 14 julio 2012 - 03:51

Buenas,

El 2 en Delphi se haría algo así
http://delphi.about....y/aa032205a.htm

Nos leemos

  • 0

#4 luisgutierrezb

luisgutierrezb

    Advanced Member

  • Miembros
  • PipPipPip
  • 92 mensajes
  • LocationMéxico

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
  • 0

#5 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

Escrito 14 julio 2012 - 05:21

Gracias por los tips, recién ahora me puedo sentar a verlos.
Ya sabrán mis resultados.

Saludos.
  • 0

#6 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

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:



delphi
  1. if (Column.FieldName =  'chkBx') then begin
  2.   Column.ButtonStyle:=  cbsCheckboxColumn;
  3. 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.

Imagen Enviada

  • 0

#7 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

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.
  • 0

#8 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

Escrito 15 julio 2012 - 11:44

En el evento DrawColumnCell coloqué esto:


delphi
  1. 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.
  • 0

#9 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

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:



delphi
  1. var
  2.     i: Integer;
  3.     sum : Single;
  4.     aux : String;
  5.     arry : Array [0..255] of String;
  6. begin
  7.   { Si no hay filas seleccionadas tiro un alert }
  8.   if VideoGrid.SelectedRows.Count = 0 then
  9.     ShowMessage('Debes seleccionar uno o más videos.')
  10.   else begin
  11.     { Sino, las recorro y guardo el valor del campo ID en un array }
  12.     sum := 0;
  13.     with VideoGrid.DataSource.DataSet do
  14.     begin
  15.       for i := 0 to VideoGrid.SelectedRows.Count-1 do
  16.       begin
  17.  
  18.         GotoBookmark(Tbookmark(VideoGrid.SelectedRows[i]));
  19.         aux := VideoGrid.columns[1].Field.AsString;
  20.         arry[i] := aux;
  21.       end;
  22.     end;
  23.  
  24.     { Mensaje de validación de baja }
  25.     botones := [mbNoToAll,mbYesToAll];
  26.     if MessageDlg('Confirmar borrado','¿Estas seguro que quiere eliminar los videos?',
  27.     mtWarning, [mbYes, mbNo],0) = mrYes then
  28.     begin
  29.       ShowMessage('Eliminados');
  30.     end;
  31.   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.
  • 0




IP.Board spam blocked by CleanTalk.