dbgrid spaltenbreite anhand des inhaltes setzen



  • hallo,

    ich habe ein dbgrid, indem ich einige zellen anzeigen werde, leider werden zellen mit sql funktionen, welche mir z.b. zwei spalten als eine spalte ausgeben immer extrem breit angezeigt.

    ich wollte jetzt eine funktion schreiben, welche alle daten jeder spalte durchgeht, und sich die breiteste breite der spalte mittels:

    DBGrid1->Canvas->TextWidth(DBGrid1->Fields[i]->AsString)
    

    errechnet, und anschließend übernimmt, jedoch funzt hier irgendetwas nicht:

    hier mein snippet:

    void ChangeColumnWidths(TDBGrid *db,bool aChangeAll)
    {
        int DEFBORDER=10;
        int spalte=0,i=0,groesse=0;
    
        for(i=0;i<db->Columns->Count-1;i++)
        {
            spalte=0;
            while(!db->DataSource->DataSet->Eof)
            {
                groesse=db->Canvas->TextWidth(db->Fields[i]->AsString);
                if(groesse > spalte)
                {
                    spalte=groesse;
                }
                db->DataSource->DataSet->Next();
            }
            db->Columns->Items[i]->Width = spalte;
        }
    }
    

    Funktionsaufruf aus dem resize_ereignis der form: TfrmMain ist meine TForm

    void __fastcall TfrmMain::FormResize(TObject *Sender)
    {
        ChangeColumnWidths(DBGrid1,true);//zweite parameter wird derzeit ignoriert!
    }
    

    die spalten sind hinterher auf 0, aber warum?

    beim debugger zeigt er an, das die "spalte" werte hat, welche nicht 0 gleichen, z.b. 53, aber er setzt die spalten alle auf 0px.

    gruß gerd



  • oh mist, ich sehe gerade, dass ich in spalte eins den kompletten datenkram durchgehe, danach ist ja Eof erreicht, ich denke mal das ist mein fehler!

    sorry, kann gelöscht werden!


Anmelden zum Antworten