Announcement

Collapse
No announcement yet.

Zeilennummerierung im Grid - Wie?

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

  • Zeilennummerierung im Grid - Wie?

    Hallo,

    wie kann ich eine Ergebnismenge in einem DBGrid in einer Spalte "Nr" durchnummerieren? In der ersten Zeile soll dort eine 1 (für Zeile = 1) stehen, in der 2. Zeile dann eine 2 (für die Kennzeichnung der 2. Zeile), usw. ...

    Wie mach ich das? Am besten DB-unabhängig, ansonsten muss es auf Oracle 8 und Interbase 5.6 laufen

    Grüße
    Patrick

  • #2
    Hallo,

    >Am besten DB-unabhängig..

    mit ADO.NET wäre das überhaupt kein Problem: <br>
    1. SELECT-Abfrage mit dem für die Datenbank zuständigen Provider deklarieren <br>
    2. Die DataAdapter-Methode FillSchema liest die Tabellenstruktur ein <br>
    3. Über Columns.Add wird eine neue Spalte hinzugefügt, die das Attribut <b>AutoIncrement</b> nutzt<br>
    4. Die DataAdpater-Methode Fill lädt die Datensätze der Ergebnismenge der SELECT-Abfrage in das <b>datenbankunabhängige</b> DataSet, wobei ADO.NET die Datensätze in der erst zur Laufzeit im Arbeitsspeicher hinzugefügten Hilfsspalte automatisch durchnummeriert.

    Das folgende VB.NET-Beispiel demonstriert das Prinzip (das Beispiel lässt sich auch mit Delphi 8 nachbauen, da Borland selbst bei BDP.NET auf das originale DataSet aus ADO.NET zurückgreift):
    <pre>
    Dim aDS As New DataSet()
    Dim aDTCustomers As DataTable
    ' SelectCommand: SELECT CustomerID, CompanyName, City FROM Customers
    SqlDataAdapter1.FillSchema(aDS, SchemaType.Source, "Customers")
    aDTCustomers = aDS.Tables("Customers")
    Dim aNewCol As DataColumn = aDTCustomers.Columns.Add("Nr", GetType(Integer))
    aNewCol.AutoIncrement = True
    aNewCol.AutoIncrementSeed = 1
    aNewCol.AutoIncrementStep = 1
    SqlDataAdapter1.Fill(aDS)
    DataGrid1.DataSource = aDS
    DataGrid1.DataMember = "Customers"
    </pre>
    Im Fall von Delphi 5/6/7 könnte man das Gleiche mit Hilfe des Recordset-Objekts von ADO umsetzen, indem der SHAPE-Provider eine Hilfsspalte anfordert, die dann vom Client in einer Schleife durchnummeriert wird. Dies würde aber bedeuten, dass die Anwendung über ADO auf die beiden Datenbanken zugreifen muss

    Comment


    • #3
      Hallo,

      interessanter Vorschlag, nur nutzen wir die BDE mit SQL-Links ... naja habe mir nun beholfen, indem ich eine Fremdkomponente (dxGrid) genommen habe, die intern mit einem ClientDataSet arbeitet und bei OnDrawCell die Möglichkeit bietet, über den Index einer Zeile (Node) den gewünschten Text dann in der Spalte auszugeben :-)

      Grüße,
      Patric

      Comment

      Working...
      X