Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: Apr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 14
gulder Va por buen camino
Thumbs up Colocar Ancho De columna de un DBGrid dependiendo del ancho del maximo campo guardado

hola foro como andan espero que bien bueno para los que no me entendieron lo del lo que trado de decir en el titulo es lo siguiente:

tengo una base de datos donde tengo los siguentes campos Id, NombreApellido, Correo yo cargo los datos de esta tabla en un DBGrid hasta hay todo bien lo que yo quiero es que cada columna coja el tamaño del maximo registro guardado les explico tengo los siguientes registros

Código:
id            NombreApellido                            Correo

01           Jaime valenzuela                          Jaimevalenzuela@hotmail.com
02           polo gil                                       pologil@hotmail.com
03           lili gil                                          liligil@hotmail.com
entonces yo quiero que el ancho de la columna NombreApellido sea el ancho del nombre y apellido mas largo encontrado en esta columna para este caso seria Jaime valenzuela, esto para que se logre leer completamente el nombre mas largo todo esta aplicado para las otras columnas en general espero que me entendan que es lo que quiero salaudos de antemano gulder-gan
Responder Con Cita
  #2  
Antiguo 07-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: May 2008
Ubicación: Girona
Posts: 1.677
Poder: 0
coso Va por buen camino
Hola, seria algo asi:

Código Delphi [-]
var
     q : TADOQuery;
     w : integer;
     i : integer;
     k : integer;
begin
     q := TADOQUery.Create(self);
     q.Connection := ADOConnection1;
     q.Active := false;
     q.SQL.Text := 'select * from tabla';
     q.Active := true;
     q.First;
     w := 0;
     while not q.Eof do
     begin
          k := length(q.FieldByName('CAMPO').Asstring);
          if k > w then w := k;
          q.Next;
     end;
     DBGrid1.Columns[1].Width := DBGrid1.Canvas.TextWidth('X')*w;
end;

Aunque en teoria, esto tendria que funcionar (a mi no me lo ha hecho pues no me reconoce la funcion length, aunque existe en sql en general)

Código Delphi [-]
q.Active := false;
q.SQL.Text := 'select max(length(CAMPO)) as max_len from tabla';
q.Active := true;
 
DBGrid1.Columns[1].Width := DBGrid1.Canvas.TextWidth('X')*q.FieldByName('MAX_LEN').Asinteger;
Responder Con Cita
  #3  
Antiguo 08-11-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: Apr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 14
gulder Va por buen camino
Thumbs up

hola coso interesante tus respuesta estoy probando algo con la misma funcion LENGTH y tampoco me la reconoce no se por que sera habra que agregar algo o que, gracias esta muy buena en teoria sirve espero lograr hallar lo del LENGTH saludes gilder-gan

Nota: para que funcione deben utilizar es LEN saludos

Última edición por gulder fecha: 08-11-2008 a las 20:46:26.
Responder Con Cita
  #4  
Antiguo 08-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: May 2003
Posts: 7.424
Poder: 23
Lepe Va por buen camino
Supongo que el problema viene por el tipo de letra no proporcionial del dbgrid. Como todos los carácteres no tienen el mismo ancho, no podemos hacer una aproximación, (usa la fuente courier).

Aquí tienes una rutina que funciona muy bien
Código Delphi [-]
{-----------------------------------------------------------------------------
  Procedure: AjustaDisplayWidth
  Author:    Lepe
  Date:      03-may-2005
  Arguments: D: TDataSet;
            const MaxAncho: Integer = 150; Maximo ancho para cada campo
            const ExtraChars:Integer = 0; para ver en un grid mejor.
  Result:    None
  Purpose:  Ajustar el tamaño de cada columna según el dato más largo.
-----------------------------------------------------------------------------}
procedure AjustaDisplayWidth(D: TDataSet;
                             const MaxAncho: Integer = 150;
                             const ExtraChars:Integer = 0);
var
  i, nIdx: Integer;
begin
  if D.Active then
    try
      D.DisableControls;
      D.First;
      nIdx := 0;
      while not D.Eof do
      begin
        for i := 0 to pred(D.FieldCount) do
        begin
          // en la 1ª vuelta reseteo el displayWidth existente
          if (nIdx = 0) then
            D.Fields[i].DisplayWidth := 1;
          D.Fields[i].DisplayWidth := EnsureRange(
            Max(D.Fields[i].DisplayWidth,
            Length(D.Fields[i].AsString) +
            IfThen(D.Fields[i].DataType = ftFloat, 3,
            ExtraChars) // añadimos espacios para ,00
            ),
            0, MaxAncho);
        end;
        D.Next;
        if nIdx = 0 then
          Inc(nIdx);
      end;
    finally
      D.First;
      D.EnableControls;
    end; // D.active
end;
No puedo decirte los "uses" porque está en una unidad grande, pero con F1 los averiguarás.

Para llamarlo:
Código Delphi [-]
ajustaDisplaywidth(query1);
Si lo ejecutas, el ancho se ajustará al último carácter, así queda la información muy "apretada", de ahí el parámetro "extrachars" que permite agregar 1 o dos espacios al final de cada columna para que el grid quede más limpio.

La rutina ifthen es la que viene en la unidad Maths.

Edito: Desde luego no es nada eficiente, pero cumple su cometido.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer para que el ancho de una columna de un TListView permanezca inalterable abracadabra OOP 17 01-10-2005 00:33:35
Ancho de columnas de un DBGrid PTW Varios 2 01-06-2005 01:50:39
Ancho de una columna en excel jgutti Servers 2 25-05-2005 21:10:55
Contorlar el ancho de las columnas de un DbGrid cadetill OOP 7 05-07-2004 13:18:21


La franja horaria es GMT +2. Ahora son las 10:02:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi