Hallo zusammen,
vorweg möchte ich sagen das ich DataSet Only arbeite, nach den Tutorials von @ErfinderDesRades
Ich arbeite an einem Übungsprogramm wo ich unter anderem Artikel anlegen kann.
Dazu habe ich einen DialogForm angelegt und mit folgendem Code wird der Artikel angelegt.
Nun ist es so das ich die Artikelnummer nicht manuell eingeben möchte, sonder sie soll automatisch vergeben werden.
Z.B. soll die erste 1000 sein und dann immer um 1 erhöht werden.
Ich hatte das mit einer List(Of Integer) gelöst.
Das funktioniert, aber scheint nicht sonderlich schön programmiert zu sein, mir wurde jedenfalls gesagt das es einen anderen Weg gibt.
Mir wurde das
Damit wird dann jedesmal die Artikelnummer um eins erhöht sobald eine neue
Da ich ja immer Daten im Projekt hatte um alles zu testen lief auch alles. Nun wollte ich aber mal einen Test machen wie das Programm läuft wenn noch gar keine Daten eingegeben sind.
Und Zack, auf die schnauze gefallen. Ich bekomme folgende Exception:
Klar, ist ja auch nichts drin.
Wie kann ich das nun abfragen ohne das eine Exception fliegt?
vorweg möchte ich sagen das ich DataSet Only arbeite, nach den Tutorials von @ErfinderDesRades
Ich arbeite an einem Übungsprogramm wo ich unter anderem Artikel anlegen kann.
Dazu habe ich einen DialogForm angelegt und mit folgendem Code wird der Artikel angelegt.
Nun ist es so das ich die Artikelnummer nicht manuell eingeben möchte, sonder sie soll automatisch vergeben werden.
Z.B. soll die erste 1000 sein und dann immer um 1 erhöht werden.
Ich hatte das mit einer List(Of Integer) gelöst.
VB.NET-Quellcode
- Dim Liste As New List(Of Integer)
- For i = 0 To bsArtikel.Count - 1
- Dim rwArt = DirectCast(DirectCast(bsArtikel(i), DataRowView).Row, ArtikelRow)
- Liste.Add(rwArt.ArtikelNummer)
- Next
- ' Prüfen ob Liste Leer
- Dim ArtNr As Integer
- Dim maximum As Integer
- Dim minimum As Integer
- If Liste.Count = 0 Then
- ArtNr = 10000 'Aller erste Artikelnummer
- Else
- maximum = Liste.Max
- minimum = Liste.Min
- ArtNr = maximum + 1
- End If
- rwArt.ArtikelNummer = ArtNr
Das funktioniert, aber scheint nicht sonderlich schön programmiert zu sein, mir wurde jedenfalls gesagt das es einen anderen Weg gibt.
Mir wurde das
.TableNewRow
Event ans Herz gelegt. So kam dann nach langer Zeit des lesens folgender Code heraus.VB.NET-Quellcode
- Partial Public Class ArtikelDataTable
- Private Sub ArtikelDataTable_TableNewRow(sender As Object, e As DataTableNewRowEventArgs) Handles Me.TableNewRow
- Dim rwArtikel = DirectCast(e.Row, ArtikelRow)
- With rwArtikel
- .Artikelnummer = NaechsteArtikelNummer()
- End With
- End Sub
- Private Function NaechsteArtikelNummer() As Int32
- Dim NeueArtikelNummer As Int32 = Me.AsEnumerable.Max(Function(m) m.Artikelnummer)
- If NeueArtikelNummer = Nothing Then
- NeueArtikelNummer = 1000
- Else
- NeueArtikelNummer += 1
- End If
- Return NeueArtikelNummer
- End Function
- End Class
Damit wird dann jedesmal die Artikelnummer um eins erhöht sobald eine neue
ArtikelRow
angelegt wird. Da ich ja immer Daten im Projekt hatte um alles zu testen lief auch alles. Nun wollte ich aber mal einen Test machen wie das Programm läuft wenn noch gar keine Daten eingegeben sind.
Und Zack, auf die schnauze gefallen. Ich bekomme folgende Exception:
System.InvalidOperationException: "Die Sequenz enthält keine Elemente."
bei dieser Zeile Klar, ist ja auch nichts drin.
Wie kann ich das nun abfragen ohne das eine Exception fliegt?
Rechtschreibfehler betonen den künstlerischen Charakter des Autors.