DataGridView / NullReferenceExeption .. letzte Reihe??

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    DataGridView / NullReferenceExeption .. letzte Reihe??

    Hallo!

    Ich hab folgendes:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim colName As String = "Menge"
    2. For Each row As DataGridViewRow In Rezeptansicht.dgvZutaten.Rows
    3. For Each cell As DataGridViewCell In row.Cells
    4. If cell.OwningColumn.Name = colName Then
    5. MessageBox.Show(cell.Value.ToString)
    6. End If
    7. End If
    8. Next
    9. Next


    Nun bekomme ich eine NullReferenceExeption am Ende des Durchlaufs, wohl weil "cell.value" = Nothing ist!

    Was mache ich an der Schleife falsch? ?(

    OK, habs! 8o

    Es fehlte: If cell IsNot Nothing AndAlso Not [String].IsNullOrEmpty(TryCast(cell.Value, String)) Then


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

    Morrison schrieb:

    VB.NET-Quellcode

    1. MessageBox.Show(cell.Value.ToString)
    Nö.
    Mach es so:

    VB.NET-Quellcode

    1. If cell.Value IsNot Nothing Then
    2. MessageBox.Show(cell.Value.ToString)
    3. End If
    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!
    *unnötiges Vollzitat entfernt*

    In meinem DGV existieren nur nummerische Werte bzw. Ganzzahlen. Ich möchte aus einer Zelle also den Wert auslesen.
    Wie gehe ich vor? Als Integer casten, parsen...? Convert.ToInt32 ist da wohl ungeeignet oder? Was ist die programmierstylistisch-beste
    Variante? Und was mache ich wenn ich überprüfen möchte ob in der Zelle nichts drin steht?

    MfG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    *unnötiges Vollzitat entfernt*

    Mein Problem ist aber, dass ich mich zwischen ListView und DGV entscheiden musste und habe mich für das Letztere entschieden.
    Ich programmiere atm einen Simulator für einen von-Neumann-Computer und habe mir für den RAM der stark vereinfacht aus einer Liste mit
    1000 Einträgen besteht, überlegt. Das Problem ist jetzt. Soll ich extra dafür eine Datenbank anlegen oder was würdest du vorschlagen? Bisher
    füge ich einfach per Code neue Daten in die Zellen ein, also per:

    VB.NET-Quellcode

    1. dgv_ram.Rows(RamEntry.addr).Cells(1).Value = "Beispiel"

    Wie sollte man das tun?

    MfG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Deine Tutorials dazu sind sehr gut!
    Ich hätte dann also für meinen "RAM-Speicher" 5 Spalten anzulegen. Wenn ich das System
    richtig verstanden habe, reicht mir doch dann ein DataTable mit 5 Spalten. In diesem Fall brauch ich ja
    nicht mehrere Tables, oder nicht? ID wäre in dem Fall dann die Rameintragsadresse also "Address" (Addr).

    MfG Tim
    In diesem Fall brauch ich ja
    nicht mehrere Tables, oder nicht?
    Da kommt es darauf an, was du alles anstellen willst...
    ID wäre in dem Fall dann die Rameintragsadresse also "Address"
    Die ID-Spalte sollte man nicht als Datenhalter hernehmen, auch wenn eine Eindeutigkeit der Daten besteht..
    .

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()

    Ich denke mir das so:
    ID - Adresse des Rameintrags (wird in dem DGV ausgeblendet)
    Adr - Adress des Rameintrags in diesem Format: (001:,002:,003:,...)
    Hi_Num - HiCode als Integer dargestellt (wird im DGV ausgeblendet)
    Hi - HiCode wird als String in diesem Format dargestellt (00,01,02,...)
    Lo_Num - LoCode als Integer dargestellt (wird im DGV ausgeblendet)
    Lo - LoCode wird als String in diesem Format dargestellt (001,002,003,...)
    Asm - Spalte ist standardmäßig leer, aber String
    Opnd - Standardmäßig leer. Wenn Asm gewählt -> Lo entspricht Opnd

    Das wäre mein Table. Die ID ist so eingestellt, dass sie nullbasierend immer um 1 inkrementiert beim Hinzufügen
    einer neuen Row.

    MfG Tim
    "Hi_Num" ist die Spalte für den Hi-Code. Die ist numerisch. Ich möchte aber, dass er im DataGridView in einem solchen Format (01,02,...,19)
    angezeigt wird. Deshalb dachte ich mir ich erstelle zwei Spalten: Hi(String: Hi_Num.ToString("00")) und Hi_Num ist direkt der Integer.
    Zwei Spalten mit den selben Daten in der Tabelle brauchst du nicht. Die richtige Darstellung der Daten machst du später im DGV.
    Den Zsammenhang mit Asm und Opnd must du auch noch genauer erklären...
    Edit: Ich nehme an, dass Adresse auch numerische Daten sind - dann gilt das Selbige wie vorher.

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

    Stell dir einen Arbeitsspeicher vor, der aus 1000 Einträgen besteht.
    Im Arbeitsspeicher liegen teilweise Programme die ausgeführt werden müssen und teilweise
    einfach nur Werte.
    RAM-Entry:
    000: Hi, Lo, Asm, Opnd
    Bsp.:
    000: 01, 999, TAKE, 999
    Die Speicherzelle an der Stelle 000 lädt die Speicherzelle 999 in den Accumulator.
    Um das zu verstehen muss man die Funktionsweise eines von-Neumann-Computers verstehen.

    MfG Tim
    Ich würde dann ein typ. Dataset in dein Projekt einfügen. Darinnen eine Tabelle erstellen mit folgenden Columns:
    ID ... Integer
    Adress ... Integer
    HI ... Integer
    LO ... Integer
    Asm ... String
    Opnd ... Integer
    Wobei ich anmerken muss, dass bei Asm ein Befehlssatz dahinterstehen wird, der wiederum in einer eigenen Tabelle zur Verfügung stehen sollte.

    Edit: Ich glaube dazu sollest du jetzt einen eigenen Thread aufmachen - dieser Thread gehört ja Morrison, wie ich gerade sehe...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()