Announcement

Collapse
No announcement yet.

IndexOutOfRange

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

  • IndexOutOfRange

    Hallo zusammen!

    Wie kann ich Daten in ein spezifisches Feld eines Datasets schreiben. Jedes mal, wenn ich das versuche, kommt es zur Fehlermeldung IndexOutOf Range.
    Dies wenn ich versuche, den Datensatz zu speichern.

    Ich versuche es über:

    Dataset.Table(Bindingsource.Position).Datafield=Va lue.

    Es scheint jedoch so, dass Bindingsource.Position 0 zurückgibt, weil gerade in das Dataset geschrieben wird. Ich habe jedoch keine Ahnung, wie ich ansonsten in ein Datenfeld schreiben kann.

    PLS HELP!
    Es gibt keine blöden Fragen, nur blöde Antworten.

  • #2
    Hallo,

    Du machst mindestens zwei Fehler (ganz genau kann ich VB nicht lesen): Mit Deinem Index greifst Du auf eine der Tabellen des DataSet zu. Was ist, wenn das DataSet nur 1 Tabelle enthält, aber auf Position 5 zeigt? Du willst ja wohl auf eine bestimmte Zeile (Rows) in einer bestimmten Tabelle zugreifen. Erst innerhalb der ausgewählten DataRow kommt der Zugriff auf ein bestimmtes Datenfeld.

    Es ist leider etwas umständlicher, weil zwischen der GUI-Darstellung und der eigentlichen Tabelle umgeschaltet werden muss. Es geht über folgende Stufen (ich trenne es hier, es kann auch in einem Befehl zusammengefasst werden, aber wird dann unübersichtlich):
    • BindingSource.Current ist die aktuell angezeigte Zeile.
    • Ein Cast auf DataRowView liefert diese Zeile.
    • DataRowView.Row liefert die dahinterliegende DataRow.

    Diese DataRow kann dann direkt mit BeginEdit/EndEdit und Zugriff auf einzelne Spalten bearbeitet werden.

    Zusammenfassung in C#:
    Code:
    DataRow row = (Bindingsource.Current as DataRowView).Row;
    row.BeginEdit();
    row["Datafield"] = Value;
    row.EndEdit();
    Gruß Jürgen

    Comment


    • #3
      Hallo Jürgen,

      vielen Dank für Deine Hilfe, es hat geklappt. Der Code unter VB.NET sieht jetzt so aus:

      dim dr as DataRow = CType(Bindingsource.Current, DataRowView).Row
      dr("Feld")=Wert...

      Mein "Problem" ist, dass ich aus Zeit- und ehrlicherweise auch Wissensgründen hauptsächlich mit dem Designer arbeite. Da meine Datenbank aber ziemlich viele Verknüpfungen hat, stößt man da ruck-zuck an die Grenzen.
      Ich bin schon öfters auf dieses Problem gestoßen, und habe mir dann immer (im nachhinein drüber nachgedacht) mit total bescheuerten Work-Arounds "geholfen".

      Vielen Dank Jürgen.
      Und P.S. Deine Beiträge in diesem Forum sind immer sehr kompetent und klasse formuliert!

      Gruß Rolf.
      Es gibt keine blöden Fragen, nur blöde Antworten.

      Comment

      Working...
      X