IsDBNull für Textbox umgehen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    IsDBNull für Textbox umgehen

    Hallo,
    ich habe viele Textboxen auf einer Form, den Inhalt der Textbox möchte ich jeweils mit einem DataSet Eintrag addieren.
    Wenn jedoch ersteinmal alle Werte auf Null sind, bekomme ich einen Fehler, dass er den Inhalt der Textbox ("0") nicht auf Int konvertieren kann (s.Anhang). Das Ganze kann ich mit der "IsDBNull Funktion abfangen (s.unten), gibt es dafür nicht einen einfacheren Weg? Da es auch ein paar Textboxen sind, wäre das sehr aufwändig...?!? Un die Zahl Null kann aber in jeder Textbx vorkommen.


    VB.NET-Quellcode

    1. If IsDBNull(F_Main.GroupBox1.Controls("tb1" & i + 1).ToString) Then
    2. F_Main.GroupBox1.Controls("tb1" & i + 1).Text = CStr(0)
    3. End If
    4. F_Main.DataSetStrafen.DataTablePerson1(0)(i) = CInt(F_Main.DataSetStrafen.DataTablePerson1(0)(i)) + CInt(F_Main.GroupBox1.Controls("tb1" & i + 1).Text)


    Das hat nichts bei den Tutorials verloren. Verschoben.
    - Solaris
    Bilder
    • 1.jpg

      169,16 kB, 593×263, 67 mal angesehen

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

    Alex0815 schrieb:

    IsDBNull
    Ändere die Spalten-Properties:

    VB.NET-Quellcode

    1. AllowDbNull = False
    2. EmptyValue = ""
    oder so ähnlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn vom Datenmodell her Nullable nicht vorgesehen ist, dann soll man das im DatasetDesigner entsprechend einstellen (s. Rods Post, nur eben nicht codeseitig, sondern im Designer).
    Ausserdem bietet sich bei Integer-Spalten an, den DefaultValue auf 0 zu setzen.

    In deim Fall kannste sogar alle Strafe-Spalten gemeinsam selektieren und diese Konfiguration eintragen.
    ..das habe ich auch bis aufs Erbrechen im DataSet Designer versucht, AllowDBNull-> False/True und DefaultValue auf 0 oder empty und auch mit dem NullValue habe ich gespielt. aber alles halt ohne richtig Verstand...;-(.... Werde es nochmal so versuchen, wie Rod es gesagt hat, aber "EmptyValue" soll dann bestimmt der DefaultValue sein, oder?

    ErfinderDesRades schrieb:

    achso, der Quatsch mit IsDbNull muss natürlich weg.
    Ich weiß nicht, was das bezwecken soll, willst du etwa den Control.Text auf "0" setzen, wenn er leer ist?
    Falls ja, dann mach das doch einfach:

    VB.NET-Quellcode

    1. if aControl.Text = "" then aControl.Text= "0"


    Ist vielleicht in der ersten Post auch nicht gut rüber gekommen, wenn ich den Qwatsch halt nicht drin habe (IsDBNull) dann erscheint die Fehlermldung die ich in der ersten Post als .jpg angehängt habe...Mit dem Qwatsch ist alles gut...
    In dem Control (TextBox) steht immer eine numerische Zahl, bei 1-9 ist alles gut, nur wenn dann mal die 0 drin steht und ich das nicht mit dem IsDBNull drin hab, kommt die Fehlermeldung....
    Glaub mir: Du ersparst dir viel Verwirrung, Fehler und Arbeit, wenn du von Anfang an und immer sinnreich benamst.

    Nenn die DataTable einfach Person, denn sie enthält Personen.
    Der Dataset-Designer generiert daraus sinnvoll benamte Klassen und Methoden, zB die Klassen PersonDataTable, PersonRow
    und sinnvoll benamte Properties und Methoden, wie Dataset.Person As PersonDataTable, PersonDataTable.AddPersonRow(rw As PersonRow), PersonDataTable.NewPersonRow() As PersonRow.
    Und viele weitere, auch Events etc.pp.

    Du willst nicht überall, wo bei sinniger Benamung "Person" steht, dann "DataTablePerson4" stehen haben, also DataTablePerson4DataTable, DataTablePerson4Row,
    Dataset.DataTablePerson4 As DataTablePerson4DataTable, DataTablePerson4DataTable.AddDataTablePerson4Row(rw As DataTablePerson4Row), DataTablePerson4DataTable.NewDataTablePerson4Row() As DataTablePerson4Row.

    Oder?