Datagridview aus anderen Thread auslesen...

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Frigo2010.

    Datagridview aus anderen Thread auslesen...

    Hallo Zusammen

    Ich habe in der Form1 ein Datagridview mit 21 Spalten, die ich per

    VB.NET-Quellcode

    1. ​Form1.DataGridView1.Rows.Add("ESL ID N/A", customerItemNumber, "Tray No. N/A", description, dimension, supplierItemNumber, unit, price, priceper, currency)
    2. Form1.DataGridView1.Item(10, i).Value = reader.GetAttribute("yearlyUsage")
    3. Form1.DataGridView1.Item(11, i).Value = reader.GetAttribute("reorderQuantity")


    usw. aus einem XML File fülle, das klappt alles ohne Probleme!

    Ich möchte aber jetzt die DataGridView1 aus einen anderen Thread raus auslesen

    Mit "Form1.DataGridView1.Rows(1).Cells(21).Value.ToString" klappt das leider nicht, da der Wert bzw. das Ergebnis Out Of Range oder Nothing ist!
    Wie mache ich das "DataGridView1" jetzt für den Thread zugreifbar?
    Gruß und Danke

    Frigo
    Der einfachste weg wird sein, dir eine Datatable zu erstellen wo du deine Daten ablegst. Dann könntest du mit andere Threads drauf zugreifen. Empfehle die sowieso Datatables, da diese einfacher zu handeln sind.Haben aber den nachteil das diese nicht Multithreading fähig sind beim schreiben.

    Auch solltest du Datagridviews nur zum anzeigen von Daten nutzen bzw. max. zum ändern, wenn du ein Binding an eine Datatable hast.
    Um es einfach auszudrücken, die Datatable ist eine gute lösung um Daten abzulegen und abzuspeicher für kleinere bzw. lokale Programme und Tools.

    Hier hat @ErfinderDesRades ein super Tut erstellt, finde den Link grad leider nicht :-(.

    Hier der Link zum Tutorial :)

    die vier Views auf Video

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Rattenfänger“ ()

    Frigo2010 schrieb:

    da der Wert bzw. das Ergebnis Out Of Range oder Nothing ist!
    Das ist nicht der Fehler, der beim Zugriff von einem anderen Thread aus entsteht, da käme ein unzulässiger threadübergreifender Vorgang.
    Ich wette, dass Du da auf eine im Ranz Mist Sch... VB6-Kompatibilitätsmodus erstellte leere Pseudo-Instanz Deines DGVs zugreifst.
    Zur Kommunikation zwischen Forms gugst Du hier: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!
    Hat doch gar nix mit threading zu tun. Hier geht es um die Kommunikation zwischen zwei Forms... Schauste Rods Link an und beschäftigst dich mal ausführlich mit dem Thema.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo Vielen Dank erstmal für die Antworten ;)

    1. Es handelt sich hier um eine Form ( Form1 )
    2. Der 2 Thread wird in einer anderen Class gestartet

    VB.NET-Quellcode

    1. Public Shared Sub send_info_email_TH()
    2. send_info_email_Thread = New System.Threading.Thread(AddressOf send_info_email_App)
    3. send_info_email_Thread.IsBackground = True
    4. send_info_email_Thread.Start()
    5. End Sub


    und von der "send_info_email_App" Function, soll auf das Datagridview zugegriffen werden.

    VB.NET-Quellcode

    1. For Each X_DGV_ROW As DataGridViewRow In Form1.DataGridView1.Rows
    2. If CInt(X_DGV_ROW.Cells(18).Value) < CInt(X_DGV_ROW.Cells(11).Value) Then
    3. Artikel = X_DGV_ROW.Cells(1).Value.ToString
    4. Lagerbestand = X_DGV_ROW.Cells(18).Value.ToString
    5. Lagerbestand_min = X_DGV_ROW.Cells(11).Value.ToString
    6. Lager_Tage = X_DGV_ROW.Cells(19).Value.ToString
    7. end if
    8. next


    Gruß

    Frigo
    Arbeite nicht in dem DataGridView, sondern in einem DataTable (welches als DataSource des Grids dient). Dieses DataTable kannst du dann an die 2. Form übergeben und dann auch in deinem Thread bearbeiten. Schau dir Rods Link an.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen