Ocultar columnas en TDBGrid, y mi primera vez.
#1
Escrito 27 septiembre 2012 - 04:40
Resulta que tengo una rejilla (TDbGrid) donde mostraré los datos de una serie de sentencias SQL, nada del otro mundo ciertamente, EXCEPTO que dado el valor de un TComboBox, se debe o no mostrar una columna de la rejilla, es decir, si el valor del TComboBox es "Mostrar", se mostrará la columna, si es "Esconder" o ningún valor, la columna no debe aparecer en el TDbGrid.
Yo, programador acostumbrado a manejar el TDbGrid como parte del trabajo diario, quise eliminar la columna "a la brava" y OBVIAMENTE el TDbGrid y la aplicación respingaron, se trabaron y no avanzaron (moraleja: No hagas ideas nuevas sin consultar a los profesionales).
... y aquí es donde entra la comunidad de DelphiAccess. Concretamente, ¿podrían orientarme en cómo generar columnas "al vuelo" en un TDbGrid, así como eliminarlas sin que proteste mi aplicación? De antemano, agradezco la atención.
#2
Escrito 27 septiembre 2012 - 05:07
TablaTU_CAMPO.Visible := false;
Digo, pa' que tanto rollo de eliminar y agregar
Saludos
#3
Escrito 27 septiembre 2012 - 07:11
Hola
delphi
TablaTU_CAMPO.Visible := false;
Digo, pa' que tanto rollo de eliminar y agregar
Saludos
Gracias, Eliseo..., ese tipo de soluciones sencillas y elegantes es lo que me hace falta...
#4
Escrito 27 septiembre 2012 - 08:37
Saludox !
#5
Escrito 28 septiembre 2012 - 08:49
Siempre me he preguntado por qué nomás a mí me regañan en público. O me llaman la atención, como quieran llamarlo... ¬¬Esos títulos TiammatMX... nada descriptivos (a excepción de la palabra TDBGrid en él )...
Elegante, muy práctico..., pero no aplicable en mi caso. Algo falta por que aún me sigue mostrando la columna....
delphi
TablaTU_CAMPO.Visible := false;
Digo, pa' que tanto rollo de eliminar y agregar ...
jejejejeje Y sigo batallando con el código para crear dos "versiones" del TDbGrid en tiempo de ejecución... jejejejeje
#6
Escrito 28 septiembre 2012 - 09:14
procedure TForm1.ComboBox1Change(Sender: TObject); var k: integer; begin for k := 0 to DBGrid1.Columns.Count -1 do if DBGrid1.Columns[k].FieldName = 'TuCampo' then if ComboBox1.Text = 'Mostrar' then DBGrid1.Columns[k].Visible := true else DBGrid1.Columns[k].Visible := false; end;
#7
Escrito 28 septiembre 2012 - 09:18
Este código quizás te pueda servir:
DBGrid1.Columns[0].Visible := False;
#8
Escrito 28 septiembre 2012 - 09:32
Siempre me he preguntado por qué nomás a mí me regañan en público. O me llaman la atención, como quieran llamarlo... ¬¬
No es solo a ti a quién se le llama la atención, y si no me dejan mentir los demás moderadores, a muchos compañeros se les ha pedido corregir preguntas, títulos o en su defecto reubicar sus solicitudes, todo de manera pública a través de sus hilos. No es, para nada, según mi consideración y creo la de muchos, un regaño, ni una fijación personal. Es en aras de mantener ordenada la casa.....
#9
Escrito 28 septiembre 2012 - 09:39
Siempre me he preguntado por qué nomás a mí me regañan en público. O me llaman la atención, como quieran llamarlo... ¬¬
No es solo a ti a quién se le llama la atención, y si no me dejan mentir los demás moderadores, a muchos compañeros se les ha pedido corregir preguntas, títulos o en su defecto reubicar sus solicitudes, todo de manera pública a través de sus hilos. No es, para nada, según mi consideración y creo la de muchos, un regaño, ni una fijación personal. Es en aras de mantener ordenada la casa.....
Saludos.
Creo más bien que se hace dicha solicitud en favor de la propiedad comunidad, para tener cierta facilidad al buscar temas.
Supongo que con títulos no relativos a al tema de debate es un tanto complicado encontrar dicho hilo si su título no se refiere para nada en lo que ando buscando.
En mi haber personal, he corregido ajenos y propios por las mismas sugerencias hechas por los Mods y Admin.
Solo una opinión personal y hago la siguiente observación, no debemos de debatir este tema en este hilo para no desvirtuarlo. (Aunque ya empece)
#10
Escrito 28 septiembre 2012 - 10:02
Elegante, muy práctico..., pero no aplicable en mi caso. Algo falta por que aún me sigue mostrando la columna.
...delphi
TablaTU_CAMPO.Visible := false;
Digo, pa' que tanto rollo de eliminar y agregar ...
jejejejeje Y sigo batallando con el código para crear dos "versiones" del TDbGrid en tiempo de ejecución... jejejejeje
Una pregunta, tienes los campos creados en el DBGrid ?
Si es así no va a funcionar, quita todos los campos del DBGrid y mi propuesta funcionará sin problemas, así lo hacemos en nuestros sistemas y no hay fallo, sólo se muestran los campos que queremos.
Saludos
#11
Escrito 28 septiembre 2012 - 10:28
Sí, campos creados en TDbGrid y en TADOQuery que son los componentes que estoy usando. Posiblemente, estoy haciendo algo mal, pero aún no logro "cachar" en qué es lo que estoy mal.Una pregunta, tienes los campos creados en el DBGrid ?
Si es así no va a funcionar, quita todos los campos del DBGrid y mi propuesta funcionará sin problemas, así lo hacemos en nuestros sistemas y no hay fallo, sólo se muestran los campos que queremos.
Saludos
Como sea, el caso es que estoy "picando piedra" un rato para resolver ésto...
Algo así estoy haciendo, Wilson. Y sobre de ello estoy..., gracias, ahí voy, haciendo caminito...
delphi
procedure TForm1.ComboBox1Change(Sender: TObject); var k: integer; begin for k := 0 to DBGrid1.Columns.Count -1 do if DBGrid1.Columns[k].FieldName = 'TuCampo' then if ComboBox1.Text = 'Mostrar' then DBGrid1.Columns[k].Visible := true else DBGrid1.Columns[k].Visible := false; end;
Respecto a lo del título, ¿por qué no dejamos el tema en paz? Lo cambié a un justo medio (ni ustedes ni yo) y supongo que se han dado cuenta que intento mantenerme ecuánime en CASI cualquier situación, tomando en cuenta que en un principio hasta nombres de películas usaba para titular mis posts. No quiero ni voy a entrar en una polémica estéril e infructuosa, haré mi mejor esfuerzo por observar el estilo de titulación requerido, pero no prometo que haré un giro de 180º en ello. Nadie lo puede hacer, nadie lo hará. Punto final (mío al menos) en el tema de mis títulos con gracia.
#12
Escrito 28 septiembre 2012 - 01:16
Sí, campos creados en TDbGrid y en TADOQuery que son los componentes que estoy usando. Posiblemente, estoy haciendo algo mal, pero aún no logro "cachar" en qué es lo que estoy mal.
Una pregunta, tienes los campos creados en el DBGrid ?
Si es así no va a funcionar, quita todos los campos del DBGrid y mi propuesta funcionará sin problemas, así lo hacemos en nuestros sistemas y no hay fallo, sólo se muestran los campos que queremos.
Saludos
Ya hiciste la prueba con lo que te dije, borra los campos de tu DBGrid, el TADOQuery te los agregará de forma dinámica, dependiento de los campos que quieras mostrar.
Saludos
#13
Escrito 28 septiembre 2012 - 02:32
...
Ya hiciste la prueba con lo que te dije, borra los campos de tu DBGrid, el TADOQuery te los agregará de forma dinámica, dependiento de los campos que quieras mostrar.
...
Sí, ya la hice y en un ambiente dinámico trabaja perfectamente. El problema es que son columnas fijas, y algunas de ellas se colorean, por lo que el "recrearlas" corro el riesgo de no poder ejecutar los procesos que le dan la funcionalidad requerida.
#14
Escrito 28 septiembre 2012 - 02:42
...
Ya hiciste la prueba con lo que te dije, borra los campos de tu DBGrid, el TADOQuery te los agregará de forma dinámica, dependiento de los campos que quieras mostrar.
...
Sí, ya la hice y en un ambiente dinámico trabaja perfectamente. El problema es que son columnas fijas, y algunas de ellas se colorean, por lo que el "recrearlas" corro el riesgo de no poder ejecutar los procesos que le dan la funcionalidad requerida.
Me parece que con unos cuantos pases mágicos funcionaría igual para datos dinámicos como lo hace para datos estáticos, es cosa de tener imaginación.
"La imaginación es más importante que el conocimiento"
Por ejemplo, así a ojo de buen cubero, yo usaría la propiedad Tag para determinar que columna se va a mostrar, colorear, etc.
Digo, no se.....
Saludos
#15
Escrito 28 septiembre 2012 - 04:38
DBGrid1.Columns[0].Visible := ComboBox1.Text = 'Mostrar'
Nos leemos