DataGridView einzelne Spalten und Zeilen auslesen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von nOOLz.

    DataGridView einzelne Spalten und Zeilen auslesen

    Hallo, heute ist bei mir der Wurm drin, ich halte mich nur mit Kleinigkeiten auf. Ich habe nun aus einer SQL Server 2008 Datenbank aus zwei Tabellen in ein DatagridView eingelesen:



    ....

    sql = "select ServerIPS.ServerID, ServerIPs.IPID, IPs.MAC, IPs.IPv4, IPs.IPv6, IPs.DNS1, DNS2, IPs.Gateway, IPs.Subnetzmaske from ServerIPs, IPs"
    Try
    connection.Open()
    adapter = New SqlDataAdapter(sql, connection)
    adapter.Fill(ds)
    connection.Close()
    DataGridView1.DataSource = ds.Tables(0)
    Catch ex As Exception
    MsgBox(ex.ToString)
    End Try
    End If.

    Also, das funktioniert ganz gut, sieht auch recht ordentlich aus. Leider kann ich mit

    ' cmdBuilder = New SqlCommandBuilder(adapter)
    ' changes = ds.GetChanges()
    ' If changes IsNot Nothing Then
    ' adapter.Update(changes)
    ' End If
    ' MsgBox("Changes Done")
    ' Catch ex As Exception
    ' MsgBox(ex.ToString)
    ' End Try



    nicht zurückschreiben, weil zwei Tabellen.



    Wie kann ich nun die einzelnen Spalten und Zeilen aus der DatagridView auslesen, um diese dann bei eigens zusammengestellten SQL-Befehl zurückzuschreiben.

    Wenn es also z. B. 3 Zeilen gibt, wie kann ich dann den Wert von Zeile 2 Spalte 3 in eine Variable einlesen?

    Wie geagt, brauche wirklich hilfe, bin am Ende mit den Nerven
    (ich schließe mch meinem Vorredner an)

    Ansonsten hast du ein komisches SQL - das dürfte irrsinnig viele Daten auswerfen, das Kreuzprodukt beider Tabellen nämlich.

    Ja, und natürlich kann man nicht eine Dataset-Tabelle abspeichern, in der 2 DB-TAbellen zusammengerührt wurden.

    Ein DataAdapter kann nur eine Tabelle abspeichern.

    VB Tags benutzen

    Bitte VB Tags benutzen - was ist damit gemeint?

    SQL Abfrage: Nein, das ist kein Kreuz-Produkt, sondern eine Abfrage, welche LAN-Verbindungen mit welchen MAC und IP-Adressen, Subnet-Masks etc. hat der Rechner mit ServerID xyz. Das sind in der Regel 4 Lan-Karten oder virtuell.

    Aber das ändert nichts an meinem Problem. Ich habe ein Datagrid und will dieses "auslesen". Für ein Programmbeispiel in VB wäre ich sehr dankbar.

    Viele Grüße

    Bitte VB Tags benutzen - was ist damit gemeint?

    Nun, es gibt 2 Beitrags-Editoren, wenn man auf "Thema erstellen" bzw. "Antworten" klickst.
    Diese beiden Editoren befinden sich auf 2 Registerkarten, die erste Registerkarte heißt "Editor", die zweite heißt "Quellcode".
    Beide verfügen über allerlei Formatierungsmöglichkeiten, die wohl wichtigste ist der VB-Tag - hier rot hervorgehoben - ich hoffe, ist zu erkennen:


    Der Editor auf der "Editor"-Registerkarte hat auch einen VB-Tag.
    Dieser funktioniert aber nicht richtig, sondern stellt durch Fehler bei Einrückungen den Code ziemlich unleserlich dar.

    Vergleiche:

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private _DataFile As New FileInfo("..\..\MyDataset.Xml")
    3. Private Sub btSave_Click(ByVal sender As Object, ByVal e As EventArgs) _
    4. Handles btSave.Click, btLoad.Click
    5. Select Case True
    6. Case sender Is btSave
    7. SaveData()
    8. Case sender Is btLoad
    9. LoadData()
    10. End Select
    11. End Sub


    mit

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private _DataFile As New FileInfo("..\..\MyDataset.Xml")
    3. Private Sub btSave_Click(ByVal sender As Object, ByVal e As EventArgs) _
    4. Handles btSave.Click, btLoad.Click
    5. Select Case True
    6. Case sender Is btSave
    7. SaveData()
    8. Case sender Is btLoad
    9. LoadData()
    10. End Select
    11. End Sub


    Langer Rede kurzer Sinn:
    Der Editor-Editor der Board-Software hat einen Bug beim Darstellen von Code, also:

    Nicht den Editor-Editor der Forums benutzen, sondern den Quellcode-Editor!

    Und nochn Hinweis: Man muß nicht einen neuen Post machen, nur um zuvor unleserlichen Code nun lesbar einzustellen, sondern VBP hat auch eine Editier-Funktion für Posts

    (so, und nun tu ich mir diesen Post in meine Favoriten, dassich ihn jedem um die Ohren hauen kann, der unanständig gelayouteten Code postet);)

    Ähm - Hierher passt auch ein Verweis auf das Mantra eines geschätzten Kollegen

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hornblower schrieb:

    SQL Abfrage: Nein, das ist kein Kreuz-Produkt, sondern eine Abfrage, welche LAN-Verbindungen mit welchen MAC und IP-Adressen, Subnet-Masks etc. hat der Rechner mit ServerID xyz. Das sind in der Regel 4 Lan-Karten oder virtuell.
    Doch, es spezifiziert das Kreuzprodukt zweier Tabellen.
    Und ich vermute, du möchtest in Wirklichkeit einen Equi-Join - also du müsstest deinem Sql ein Inner Join - Segment anfügen.

    Aber das ändert nichts an meinem Problem. Ich habe ein Datagrid und will dieses "auslesen". Für ein Programmbeispiel in VB wäre ich sehr dankbar.
    Richtig ;)
    Wie erwähnt, kann man so zusammengerührte Tabellen nicht so einfach wieder zurückspeichern - aus verschiedenen Gründen nicht.
    Alternativ kannst du die Tabellen getrennt laden, und erst im Gui, in einem geeignet konfigurierten DataGridView zu einer Tabellen-Ansicht vereinen. Da hierbei die eigentlichen Tabellen getrennt bleiben, ist ein Rückspeichern von Änderungen problemlos möglich.
    gugge MN-View auf Movie-Tuts

    Ein Copy-Paste-Programmbeispiel wirst du wohl nicht kriegen, denn um eines für dich zu erstellen bräuchte man deine Datenbank, und eine Solution, die darauf zugreift.

    Zugriff auf Datagrid Zellen

    Hallo, danke für den Hinweis bezüglich des SQL-Statements. Tatsächlich hatte ich eine where-Klausel eingebaut, die ich hier unterschlagen hatte. Aber die Datenbank ist nicht mein Problem. Das Problem lautet: Zugriff auf Datagrid Zellen

    Bezüglich dieses Problems bin ich ein Stück weiter, ohne es endgültig gelöst zu haben.

    Ich beschreibe vielleicht nochmal das Problem. Ich habe ein DatagridView, dass aus einem Dataset gefüllt wird:

    VB.NET-Quellcode

    1. DataGridView1.DataSource = ds.Tables(0)


    Jetzt will ich auf einzelne Elemente (Zellen) des Datagrids zugreifen, zum Beispiel auslesen, was in der 1 Zeile und der 3 Spalte enthalten ist. Hier im Hauptforum habe ich etwas gefunden: DataGridView Zeilen farbig hervorheben.

    Hier kann ich schon mal auf jede Zeile zugreifen, zum Beispiel den Hintergrund aller Zellen dieser Zeile auf Color Rot setzen. So, das wäre schon mal der erste Schritt, der Zugriff auf eine Zeile. Jetzt möchte ich weiter den Inhalt des 4 Elements auslesen. Ich finde einfach nichts genaues. Ich bin aber soweit:

    VB.NET-Quellcode

    1. MessageBox.Show(DataGridView1.Item(3, 0).GetType().ToString)


    Hier wird mir der Typ von dieser Zelle ausgegeben: System.Windows.Forms.DataGridView TextBoxCell

    Na das ist ja schon mal was.

    Wie kann ich nun den Inhalt dieser Zelle auslesen oder den Inhalt verändern? Die Antwort lässt sich bestimmt in einem VB Statement geben, ich komme aber nicht weiter.



    Viele Grüße

    Hornblower




    Heureka, ich habs gefunden

    VB.NET-Quellcode

    1. DataGridView1.Item(3, 0).value = "xyz"




    oder in einer for Schleife, alle Elemente mal als Beispiel mit einem Wert vorbesetzen:

    VB.NET-Quellcode

    1. For Each rw As DataGridViewRow In DataGridView1.Rows
    2. For Each col As DataGridViewColumn In DataGridView1.Columns
    3. DataGridView1.Item(col.Index, rw.Index).Value = col.Index.ToString + rw.Index.ToString
    4. MessageBox.Show(DataGridView1.Item(col.Index, rw.Index).Value)
    5. Next
    6. Next



    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Hornblower“ ()

    Andere Idee -> sozusagen reverse

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    2. Dim zähler As Integer
    3. Dim Wert1 as String
    4. zähler = Me.DataGridView1.CurrentRow.Index
    5. Wert1 = Datensatz_1.Tables(0).Rows(zähler).Item(3)
    6. End Sub


    Die Auswahl im DBGrid is zeilenweise (rows) und der zähler navigiert im Datensatz. Diese Sub ist für 1-Klick, notfalls den Event anpassen.


    Vielleicht konnte ich hiermit einen weiteren Ansatz liefern.

    nOOLz