Announcement

Collapse
No announcement yet.

Wert eines Felds ermitteln

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

  • Wert eines Felds ermitteln

    Hallo,
    es klingt irgendwie zu dorf, aber kann jemand mir helfen?<BR>
    in Delphi: MyString := Tbl.FieldByName(Blabla).AsString;<BR>
    und in C# ?<BR>
    Danke

  • #2
    Hallo,

    &gt;.in Delphi: MyString := Tbl.FieldByName(Blabla).AsString;

    in Delphi ist es nur deshalb so einfach, weil des dort das Konzept des Datensatzzeigers gibt (jede Datenmenge kann zur gleichen Zeit nur einen einzigen Datensatz bedienen). Im Gegensatz dazu arbeitet ADO.NET (genauer gesagt die DataSet-Klasse) mengenorientiert, so dass es es keinen Datensatzzeiger gibt (ein Formular kann in seinen Controls somit auch mehrere Datensätze gleichzeitig anzeigen). Daher muss ein <b>CurrencyManager</b> eine virtuelle Datensatzposition simulieren, wobei es in einem Form mehrere CurrencyManager (je nach angebundenen Controls) geben kann.

    Wenn nun ein DataGrid oder eine TextBox an ein typisiertes DataSet gebunden wurde, kann man über den folgenden Weg den Feldwert, wobei das in meinem Beispiel das Feld "AdrId" betrifft:
    <pre>
    <b>private</b> CurrencyManager aCM;
    ...
    aCM = (CurrencyManager)BindingContext[dataGridAutor.DataSource, dataGridAutor.DataMember];
    iAdrId = (<b>int</b>)dataSetAutor1.Adressen.Rows[aCM.Position][<font color="#9933CC">&quot;AdrID&quot;</font>];
    </pre>
    Wenn die Controls nicht direkt an ein DataSet, sondern an ein <B>DataView</b> gebunden werden, kann man auch folgendes machen:
    <pre>
    System.Data.DataRow aDR = dataViewAbos[dataGridAbos.CurrentRowIndex].Row;
    <b>int</b> iAutorAboID = (<b>int</b>)aDR[0];
    </pre>
    Der "virtuelle Datensatzzeiger" bezieht sich in beiden Beispielen immer nur auf das Control, in dem der Wert gerade angezeigt wird. Da man zum Beispiel in 3 Textboxen die Daten von 3 <b>unterschiedlichen</b> Datensätzen gleichzeitig anzeigen kann, ist unter ADO.NET diese Control-bezogene Herangehensweise notwendig. In Delphi war so etwas nicht möglich, dort mussten wir den TDataSet-Nachfolger duplizieren (d.h. die Datenmenge mehrfach vorhalten), wenn unterschiedliche Datensätze gleichzeitig angezeigt werden sollten

    Comment

    Working...
    X