Announcement

Collapse
No announcement yet.

Fragen zum DBGrid

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fragen zum DBGrid

    Hallo ich hab hier ein Paar fragen zum DBGrid von Delphi 5

    1. Wie sortiere (auf- bzw. absteigend) ich eine Bestimmte Spalte und zwar wenn ich einen Doppelklick auf den Spaltennamen( Titel) mache.
    2. Wie mache ich einen Zeilenumbruch in Zellen die deren Inhalt Länger ist als die Spaltenbreite (Also so ne art Word Wrap)

  • #2
    Hallo,

    zur Frage 1: <br>
    Leider wurde bei der Frage nicht erwähnt, über welche Komponente die Datenmenge von der Datenbank abgefordert wird. Im Fall von ADO (TADODataSet) ist das abwechselnde auf- und absteigende Sortieren durch einen Mausklick auf den Spaltennamen im TDBGrid sehr schnell erledigt (Ereignisbehandlungsmethode für <b>OnTitleClick</b>):
    <pre>
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
    with TADODataSet(Column.Field.DataSet) do
    begin
    if Sort = Column.Field.FieldName then
    Sort := Column.Field.FieldName + ' DESC'
    else
    Sort := Column.Field.FieldName;
    end;
    end;
    </pre>

    zur Frage 2: <br>
    Über eine Ereignisbehandlungsmethode für <b>OnDrawColumnCell</b> kann die eigene Anwendung das Aussehen festlegen. Ein Beispiel dafür ist in der Delphi-Hilfe auf der Seite für <b>OnDrawDataCell</b> zu finden

    Comment


    • #3
      Hallo Andreas,

      in meinem Programm wird die DBGrid mit einer ADOQuery gefühlt.
      Ich hab da keine ADODataSet drin. Egal ich hab dann eine eingefügt und als Eigenschaft Connection die ADO Connection angegebn und als DataSource die DataSource1 die mit meiner ADOQuery verbunden ist.
      Dann hab ich das oben angegebene Beispiel ausprobiert und es geht nix.

      Hast du mal ein kongretes Beispiel (einfach)?

      danke
      Stefa

      Comment


      • #4
        Hallo,

        wenn die Daten aus der TADODataSet-Instanz im TDBGrid angezeigt werden, ist die TDBGrid-Instanz über eine TDataSource-Instanz mit der TADODataSet-Instanz verbunden. Bei einem Mausklick auf die Titelzeile des TDBGrid übergibt die VCL über den Parameter <b>Column</b> einen Zeiger auf die entsprechende TDBGrid-Spalte. Und dieses TColumn-Objekt "kennt" über seine Eigenschaft <b>Field</b> die zugrundeliegende Spalte der Datenmenge (TADODataSet). Und über die Field-Eigenschaft <b>DataSet</b> kann das TDBGrid sogar die konkrete TADODataSet-Instanz ermitteln, von der die Daten stammen, die das TDBGrid anzeigt.

        Über die TADODataSet-Eigenschaft <b>Sort</b> kann das darunterliegende Recordset-Objekt von ADO mit der Sortierung der Datenmenge beauftragt werden: <br>
        a) Sort := 'Feldname' (aufsteigend sortieren) <br>
        b) Sort := 'Feldname DESC' (absteigende sortieren <br>
        Damit ich nicht die Spaltennamen fest im Programmcode eintragen muss, lese ich diese erst zur Laufzeit über <i>Column.Field.FieldName </i> aus. Somit kann ich diese Programmzeilen über die Zwischenablage universell in den verschiedenen Projekten verwenden, da keine konkreten Instanz- und Spaltennamen auftauchen

        Comment


        • #5
          Hallo Andreas,

          danke für deine Erläuterungen, mußte zwar noch eine bischen Grübeln aber jetzt funktioniert es mit dem Sortieren.

          danke
          Stefa

          Comment

          Working...
          X