Zeilenhöhe von DBGrid verändern?
-
Hallo, kann man die Zeilen höhe in einem DBGrid verändern?
LG Michel
-
Hallo,
Das TDBGrid ist von TCustomGrid abgeleitet. Es erbt von diesem die Eigenschaft RowHeights.
BCB-3_Hilfe schrieb:
Dieses Beispiel basiert auf einem Formular, das ein String-Gitter und eine Schaltfläche enthält. Wenn der Benutzer auf die Schaltfläche klickt,
ändert sich die Anzahl der Spalten und Zeilen, und der ersten Spalte sowie der ersten Zeile wird eine andere Größe als den
restlichen Spalten und Zeilen zugewiesen.void __fastcall TForm1::Button1Click(TObject *Sender)
{
DrawGrid1->ColCount = 7;
DrawGrid1->RowCount = 11;
DrawGrid1->RowHeights[0] = 35;
DrawGrid1->ColWidths[0] = 90;
}Das obige Bsp. ist logischerweise auch für ein DBGrid anwendbar.
Aufschlussreich sind (für die Beantwortung derartiger Fragen wie deiner) die Komponenten-Hierarchie,
die *.hpp-Dateien und die Sourcen der VCL.mfg
kpeteredit/Ergänzung:
Einziges Handicap an der ganzen Sache mit DBGrid ist, dass nicht ohne weiteres auf RowHeights zugegriffen werden kann.
(RowHeights' is not accessible)Einfachste Lösung: dynamisches Erstellen des Gitters. Ist zunächst Schreibaufwand, aber das ist der Preis.
Minimal-Beispiel:
*.h
#include <DBGrids.hpp> class MyDBGrid : public TDBGrid { private: public: __fastcall MyDBGrid( TComponent* Owner ); int __fastcall GetRowHeights(int Index); void __fastcall SetRowHeights(int Index, int Value); __published: __property int RowHeights[int Index] = {read=GetRowHeights, write=SetRowHeights}; }; //In class Formular private: MyDBGrid* _DBGrid; public: __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(void);
*.cpp:
__fastcall MyDBGrid::MyDBGrid( TComponent* Owner ) : TDBGrid(Owner) {} //-------------------------------------------------------------------------- int __fastcall MyDBGrid::GetRowHeights(int Index) { return TDBGrid::RowHeights[Index]; } //-------------------------------------------------------------------------- void __fastcall MyDBGrid::SetRowHeights(int Index, int Value) { if (Value != TDBGrid::RowHeights[Index]) { TDBGrid::RowHeights[Index] = Value; } } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { _DBGrid = new MyDBGrid(this); _DBGrid->Parent = Panel1; _DBGrid->Align = alClient; _DBGrid->DataSource = DataSource1; _DBGrid->Columns->Add(); _DBGrid->Columns->Items[0]->FieldName = "Frage"; _DBGrid->Columns->Add(); _DBGrid->Columns->Items[1]->FieldName = "Punkte_max"; _DBGrid->Columns->Add(); _DBGrid->Columns->Items[2]->FieldName = "Punkte_ist"; } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1(void) { delete _DBGrid; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { _DBGrid->RowHeights[0] = 90; _DBGrid->RowHeights[1] = 70; } //---------------------------------------------------------------------------
Ratsam ist, die Zeilenhöhe bei aktiver Connection zu setzen (wenn also Daten anliegen).
-
Hallo, vielen lieben Dank erstmal für die Mühe, das alles aufzuschreiben! Da ist auch alles gut verständlich
Aber bevor ich das jetzt alles einbaue: Wie kann ich auf Ereignisse des DBGrids zugreifen, welchen ich dynamisch dann erzeuge?
-
Die Ereignisse sind Funktions-Pointer denen einen Wert/Funktion zugewiesen werden kann.
-
Hallo
Siehe auch FAQ hier im BCB-forum, Abschnitt Komponenten benutzen, Thread zur Laufzeit erstellen, anzeigen und Events zuweisen.
bis bald
akari
-
Ja das habe ich verstanden. Eigentlich ganz simple
Kann ich denn das mit RowHeights dann auch für Spaltenbreite machen? so ala
int __fastcall MyDBGrid::GetColWidths(int Index) { return TDBGrid::ColWidths[Index]; } //-------------------------------------------------------------------------- void __fastcall MyDBGrid::SetColWidths(int Index, int Value) { if (Value != TDBGrid::ColWidths[Index]) { TDBGrid::ColWidths[Index] = Value; } }
-
Hallo
Siehe TDBGrid::Columns::Items[]::Width
bis bald
akari
-
wie kann man den text im DBGrid in den feldern zentrieren? dazu habe ich noch nix gefunden ... beim stringgrid kann man ja hAlign mit angeben...
-
Zur Entwurfszeit Rechtsklick in das Grid, Spalteneditor im Popupmenü auswählen.
Da kannst du alle/ausgewählte Spalten hinzufügen und bearbeiten.
Werte der jeweiligen Spalte werden im Objektinspektor gesetzt, so auch die Textausrichtung.edit
Ähm, du brauchst ja sicher den Laufzeitcode:zB
DBGrid1->Columns->Items[1]->Alignment = taCenter;