Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-11-2005
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
Ordenar DBGrid por columnas

Hola Gente, alguien me puede decir como hacer para ordenar un DBGrid haciendo click en el encabezado. Desde ya muchas Gracias...
Responder Con Cita
  #2  
Antiguo 27-11-2005
Avatar de mazinger
mazinger mazinger is offline
Miembro
 
Registrado: jul 2004
Ubicación: Zamora
Posts: 85
Poder: 20
mazinger Va por buen camino
1.- Utiliza TJvDBUltimGrid, que dispone de esa opción.
2.- Puedes capturar el evento OnTitleClick del DBGrid y cambiar la SQL del Dataset ordenandolo por el campo correspondiente
Te paso un ejemplo válido para Un ADODataSet

Código Delphi [-]
 procedure TdmRecursos.OrdenaGrid(aColumn: TColumn);
 Var
   SQL,Orden, Temp : String;
   Index : Integer;
   Marca : TBookMark;
 begin
   With (aColumn.Grid.DataSource.DataSet  as TADODataSet) do begin
     If (aColumn.Field.FieldKind = fkCalculated) Or
        (aColumn.Field.FieldKind = fkLookup) Then ShowMessage('No se puede ordenar por este campo')
     Else Begin
       Marca := aColumn.Grid.DataSource.DataSet.GetBookmark;
       Try
         Close;
         SQL := CommandText;
         If aColumn.Field.Lookup Then Orden := aColumn.Field.KeyFields
           Else Orden := aColumn.FieldName;
         Index :=Pos('Order',SQL)-1;
         If Index <> -1
            Then Temp := Copy(SQL,0,Index)+'Order by '+Orden
            Else Temp := SQL + ' Order by '+Orden;
         CommandText := Temp;
         Open;
         aColumn.Grid.DataSource.DataSet.GotoBookmark(Marca);
       Finally
         aColumn.Grid.DataSource.DataSet.FreeBookmark(Marca);
       End;
     End;
   End;
 end;
__________________
Visita mi página (en construcción):

http://mazinger.wordpress.com/

Última edición por dec fecha: 28-11-2005 a las 11:15:16. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #3  
Antiguo 27-11-2005
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
Ordenar un DBGrid

Muchas gracias.. voy a probar tu ejemplo.
Responder Con Cita
  #4  
Antiguo 27-11-2005
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Si tienes objetos ADO de acceso a datos y ADOQuerys, puedes capturar el evento onTitleClick y poner

QueryX.Sort:= 'campo1, campo2 ASC';

Puedes hacer todas las combinaciones que quieras.

Lo he probado hoy y he alucinado, porque no lo conocía.

Espero que te sirva de ayuda.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 27-11-2005
Epachsoft Epachsoft is offline
Miembro
 
Registrado: abr 2005
Posts: 167
Poder: 19
Epachsoft Va por buen camino
Y para no dejar por fuera la parte comercial.

Si puedes meter en tu presupuesto comprar componentes. Quantum Grid de DevExpress, es el sueño hecho realidad en el manejo de grids.

El sort es simplemente increible, no solo haces clicks en las columnas, las puedes agrupar visualmente, drag and drop y el usuario inclusive puede consturir sus propios agrupamientos, etc.

Pero, esa es una de las 8,000 cosas extras que puedes hacer con ellos. Yo lo pense DEMASIADO antes de comprarmelos, pero ahora, casi que toda solucion la trato de representar de una u otra forma en grid, debido a las cosas increibles que uno puede hacer con este grid.
__________________
Esteban Pacheco
A delphi programming blog
Responder Con Cita
  #6  
Antiguo 28-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por último, si quieres hacerlo con el DBGrid estandard de delphi, tampoco es muy complicado; Aquí lo tienes explicado muy claro y con el código necesario.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 25-03-2016
Avatar de pnsd_89
pnsd_89 pnsd_89 is offline
Miembro
 
Registrado: mar 2007
Posts: 112
Poder: 18
pnsd_89 Va por buen camino
Buenas yo uso un DBGridEh con DBxpert logro ordenar con el siguiente codigo:

Código Delphi [-]
procedure OrdenaDataSetGridEH(var CDS: TClientDataSet; Column: TColumnEH; var dbgPrin: TDBGridEH);
const
  idxDefault = 'DEFAULT_ORDER';
var
  strColumn : string;
  i : integer;
  bolUsed : boolean;
  idOptions : TIndexOptions;
begin

  strColumn := idxDefault;
  if Column.Field.FieldKind in [fkCalculated, fkLookup, fkAggregate, fkInternalCalc] then Exit;
  if Column.Field.DataType in [ftBlob, ftMemo] then Exit;
  //
  //for i := 0 to dbgPrin.Columns.Count -1 do
    //dbgPrin.Columns[i].Title.Font.Style := [];
  for i := 0 to dbgPrin.Columns.Count -1 do
    dbgPrin.Columns[i].Title.Font.Color := clNavy;

  //
  bolUsed := (Column.Field.FieldName = CDS.IndexName);
  //
  CDS.IndexDefs.Update;
  for i := 0 to CDS.IndexDefs.Count - 1 do
  begin
    if CDS.IndexDefs.Items[i].Name = Column.Field.FieldName then
    begin
      strColumn := Column.Field.FieldName;
      case (CDS.IndexDefs.Items[i].Options = [ixDescending]) of
         True : idOptions := [];
         False : idOptions := [ixDescending];
      end;
    end;
  end;
  //
  if (strColumn = idxDefault)  or (bolUsed) then
  begin
    if bolUsed then
      CDS.DeleteIndex(Column.Field.FieldName);
    try

      {Esto evita un error de Key Violation}
      if (idOptions <> [ixDescending])
      and (idOptions <> []) then
        idOptions := [];

      CDS.AddIndex(Column.Field.FieldName, Column.Field.FieldName, idOptions,'', '', 0);
      strColumn := Column.Field.FieldName;
    except
      if bolUsed then strColumn := idxDefault;
    end;
  end;
  //
  try
    CDS.IndexName := strColumn;
    Column.Title.Font.Color := clRed;
    Column.Title.Caption := Column.Title.Caption;
    Column.Title.Font.Style := [fsbold];
    CDS.First;
  except
    CDS.IndexName := idxDefault;
  end;
  //
end;

Ahora cuando a un CDS le creo un campo de tipo lookup el mismo no lo ordena y realmente ya he mirado mucho y no logro entender el porque
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


La franja horaria es GMT +2. Ahora son las 17:11:05.


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