Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Columnas de un StringGrid...

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Columnas de un StringGrid... Responder citando

¡Hola a tod@s!

¿Cómo puedo cambiar de posición entre sí dos columnas en un StringGrid por código?

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

Hola Tecno:

Una forma de hacerlo:

    void SGIntercambiaColumna(TStringGrid *sg, int nCol1, int nCol2)
    {
           TStringList *tmpCol = new TStringList;
           tmpCol->Assign(sg->Cols[nCol1]);
           sg->Cols[nCol1]->Assign(sg->Cols[nCol2]);
           sg->Cols[nCol2]->Assign(tmpCol);
           delete tmpCol;
    }

Y como ejemplo de utilización:

    SGIntercambiaColumna(StringGrid1, 1, 3);

Saludos:
_Leo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡Hola _Leo!

Gracias por contestar. La idea que me propones se me ocurrió pero me daba error porque en lugar de hacerlo con "Assign" lo hice con "=". Al final lo que he hecho a sido lo mismo pero en vez de una variable temporal he usado una columna temporal del propio grid. Como la creo, la uso y la destruyo, todo ello en menos de 10 líneas, no se nota. De todas formas, gracias por hacerme ver el error que cometí.

Salu2.
Volver arriba
Mensaje    Asunto: Responder citando

¡Ah!, se me olvidaba...

Buscando en internet encontré otra forma de solucinarlo, en código delphi, pero mucho mas liosa. Proponían derivar de TCustomGrid una clase que tuviese los métodos MoveColumn y MoveRow de TCustomGrid. Yo lo que digo es, ¿por qué son métodos protegidos?. Los podían haber integrado en TStringGrid.

Estos de Borlaaaand...

Salu2. Wink
Volver arriba
Mensaje    Asunto: Responder citando

Bueno, podemos hacer un poco de "trampa", aunque el comportamiento de MoveColumn no es el mismo que el de la función anterior, ya que la función anterior *intercambia* las columnas, mientras que MoveColumn mueve la columna a la nueva posición insertándola y desplazando así las que pilla por el medio:

Código:
void MoverColumna(TStringGrid *sg, int desde, int hasta)
{
    struct TStringGridX : public TStringGrid
    {
        void __fastcall MoverColumna(int desde, int hasta)
        {
           MoveColumn(desde, hasta);
        }
    };

    static_cast<TStringGridX*>(sg)->MoverColumna(desde, hasta);
}


MoverColumna(StringGrid1, 1, 3);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡Hola _Leo!

Lo que pones se parece mucho (si no es exáctamente lo mismo) a lo que he leido, pero en C++. Como tu bien dices, una cosa es mover una columna y otra intercambiar dos, que es lo que yo quiero. Por tanto, la primera idea es la "guapa".

Bueno tío, gracias por todo y salu2. Wink
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.