Dataset/Datagridview Fragen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Dataset/Datagridview Fragen

    Hallo zusammen,

    brauche mal wieder eure Hilfe.....hab 2 Fragen.

    1.

    Ich hab nen typisiertes DataSet (Anzeige per DataGridView - 6 Spalten)

    Ich möchte abfragen ob in der letzten Zelle (letzte Zeile,letzte Spalte) ein Wert steht oder ob diese leer ist, wenn sie leer ist, soll diese komplette Zeile gelöscht werden.

    Wie stell ich das an ???

    2.

    Wie kann ich es umsetzen dass an der markierten stelle des DGV eine (neue, leere) Zeile eingefügt wird, bzw. die markierte Zeile gelöscht wird.
    Hab hier gelesen dass der BindingNavigator wohl eher ne schlechte Lösung ist.....

    Ich hoffe ihr könnt folgen und habt nen guten Tipp für mich !

    Danke sagt Guinnes :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Guinnes“ ()

    Guinnes schrieb:

    wenn die letzte Zelle (letzte Zeile,letzte Spalte) leer ist, soll diese komplette Zeile gelöscht werden.
    Versuchma, das DGV zu vergessen. Von Belang ist ausschließlich das Dataset, und du willst die letzte DataRow einer DataTable löschen, wenn deren letzter Spaltenwert Nothing ist.
    Wie heißt diese letzte Spalte?

    Den letzten Datensatz holst du am besten aus der BindingSource, an die das DGV gebunden ist:

    VB.NET-Quellcode

    1. dim rwLast=DirectCast(DirectCast(BindingSource(BindingSource.Count-1), DataRowView).Row, myDataRow)

    Wie kann ich es umsetzen dass die markierte Zeile gelöscht wird.

    VB.NET-Quellcode

    1. BindingSource.RemoveCurrent()
    vielen Dank !!!

    Zu 1: letzte Spalte heißt "Summe", also

    VB.NET-Quellcode

    1. dim rwLast=DirectCast(DirectCast(BindingSource(BindingSource.Count-1), DataRowView).Row, Summe)


    und dann

    VB.NET-Quellcode

    1. rwLast.Remove/Delete... irgendwas ???



    Werde es probieren.....leider keine Zeit heute.

    Gruß Guinnes und vielen Dank

    Guinnes schrieb:


    VB.NET-Quellcode

    1. dim rwLast=DirectCast(DirectCast(BindingSource(BindingSource.Count-1), DataRowView).Row, Summe)

    Oh, da fehlen Grundlagen. Den Sinn von DirectCast sollte man schon verstehen, dass in einen Typ gecastet wird, nicht in den SpaltenNamen einer typisierten DataRow.
    Das sind einige Grundlagen:
    1. Was macht DirectCast?
    2. Was ist ein DatenTyp?
    3. was ist eine typisierte DataRow?
    4. (und jetzt - das ist die Frage: ) Welchen DatenTyp hat die typisierte DataRow, die in deinem Dataset drinne ist?
    ich weiß nicht, welchen Datentyp deine typisierte DataRow hat, das hängt vom Namen der DataTable ab. Wenn deine DataTable zB "MyTable" heißt, dann enthält sie Datarows vom Typ "MyTableRow", und dann könnteman so schreiben:

    VB.NET-Quellcode

    1. dim rwLast=DirectCast(DirectCast(BindingSource(BindingSource.Count-1), DataRowView).Row, MyTableRow)
    2. if rwLast.IsSummeDBNull then rwLast.Delete()


    Die Frage ist also: Wie heißt die DataTable, an die gebunden wird (und deren letzte Spalte "Summe" heißt)?

    Zu den Grundlagen, was ein DatenTyp ist, und was DirectCast bedeutet (Stichwort Typumwandlung) gibts eiglich kaum eine Alternative, als es zu lernen: zB. dieses Buch Lesen
    nabend,

    du hast sicher recht, mir fehlen grundlagen.....

    ich möchte es nun anders angehen.

    ich gebe dem user die möglichkeit die daten im dgv frei zu editieren


    VB.NET-Quellcode

    1. DGV.enabled = true
    2. DGV.readonly =false


    geht super.....nun möchte ich dass eine bestimmte Spalte ben NICHT editierbar ist.

    klar, im Dataset (Datatable) lässt sich diese Spalte natürlich "ReadOnly" setzen.

    Aber man kann die Werte in der Spalte immer noch frei editieren, bekommt dann allerdings ne Fehlermeldung aufgrund der ReadOnly Einstellung.

    Gibt es eine Möglichkeit eine Änderung der Werte in dieser Spalte von vornherin zu verbieten (also das die Werte "ausgegraut" erscheinen)



    Noch eine Sache:

    Ich möchte den letzten Wert der Spalte auslesen:

    VB.NET-Quellcode

    1. ' Zählen der Zeilen
    2. dim rc as integer = (DGV.rows.count -1)
    3. ' Zuweisen Inhalt letzte Zeile/Spalte 6 in Variable
    4. dim lb as integer = (dgv.item(rc,6).value)
    5. label1.text = CStr(lb)


    so bekomme ich ne Fehlermeldung :


    der index lag außerhalb des Bereiches. Er muss nicht negativ und kleiner als die Auflistung sein.....

    was mach ich falsch ???



    Danke sagt,

    Guinnes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Guinnes“ ()

    Guinnes schrieb:

    was mach ich falsch ???
    In meinen Augen falsch ist, dass du dich vom Databinding wieder abwendest, und dem Control-Gefummel zu, weil dir Grundlagen fehlen, und du zB. die eiglich einfache Frage:

    ErfinderDesRades schrieb:

    Wie heißt die DataTable, an die gebunden wird (und deren letzte Spalte "Summe" heißt)?
    nicht beantworten kannst.

    Aus deiner sicht falsch ist vmtl. nur, dass du die Indicees glaub vertauscht hast - columnIndex<->rowIndex
    Hallo,

    die Datatable heißt "Datatable1"...ich hab da den Standardnamen nicht geändert....

    das ich rows - column index vertauscht habe dachte ich auch.....hab es auch anders herum probiert, bekam aber den selben fehler.

    sobald ich mal zeit finde lese ich mich in die grundlagen ein.

    Danke für deine Unterstützung !!!!!!!!

    Guinnes