Inhalte aus Excel in Datagridview einfügen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von xored.

    Inhalte aus Excel in Datagridview einfügen

    Hey,

    ich habe eine Datagridview mit 3 Spalten.
    Ich benutze folgenden Code, um aus Excel Inhalte in diese Datagridview einzutragen:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
    2. If e.Control AndAlso e.KeyCode = Keys.V Then
    3. For Each line As String In Clipboard.GetText.Split(vbNewLine)
    4. If Not line.Trim.ToString = "" Then
    5. Dim item() As String = line.Split(vbTab(0))
    6. table.Rows.Add(item)
    7. End If
    8. Next
    9. DataGridView1.DataSource = table
    10. End If
    11. End Sub


    Das klappt auch.

    Nun aber folgende Situation:


    Ich möchte nun auch aus Excel folgendes kopieren und einfügen können:



    Und das soll hier erscheinen:



    Mit "meiner" Methode wird ja zwangsweise eine neue Row hinzugefügt, nun möchte ich aber ja in der existierenden Row bloß etwas hinzufügen, wisst ihr was ich meine?

    Ich habe folgende Methode geschrieben:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
    2. If e.Control AndAlso e.KeyCode = Keys.V Then
    3. Dim Counter As Integer = DataGridView1.CurrentRow.Index - 1
    4. For Each line As String In Clipboard.GetText.Split(vbNewLine)
    5. If Not line.Trim.ToString = "" Then
    6. Counter = Counter + 1
    7. Dim item() As String = line.Split(vbTab(0))
    8. If Not IsDBNull(DataGridView1.Rows(Counter).Cells(0).Value) Then 'Falls Erste Zelle nicht leer
    9. If String.IsNullOrEmpty((DataGridView1.Rows(Counter).Cells(0).Value)) Then
    10. Else
    11. If String.IsNullOrEmpty(item(0)) = False Then
    12. DataGridView1.Rows(Counter).Cells(1).Value = item(0) 'Zelle 2 Befüllen
    13. End If
    14. Try
    15. If String.IsNullOrEmpty(item(1)) = False Then
    16. DataGridView1.Rows(Counter).Cells(2).Value = item(1) 'Zelle 3 Befüllen
    17. End If
    18. Catch
    19. End Try
    20. End If
    21. Else 'Falls leer, dann einfach Row hinzufügen
    22. table.Rows.Add(item)
    23. End If
    24. End If
    25. Next
    26. DataGridView1.DataSource = table
    27. End If
    28. End Sub



    Das klappt auch, das Problem ist aber, dass das erstens nicht effektiv ist, zweitens muss dann das Sorting deaktiviert sein, drittens muss Multiselect deaktiviert sein.
    Ich klicke also die erste Zeile an und er fügt mir das dann fortlaufend ein, aber gibts da keine besseren wege?

    Danke.
    Gruß


    EDIT: Okay, das Problem mit dem Sorting ist behoben:

    VB.NET-Quellcode

    1. ​ table.DefaultView.Sort = "Artikelnummer DESC"
    2. table = table.DefaultView.ToTable


    Somit macht es das schon ganz passabel. Gibt es trotzdem bessere Möglichkeiten?


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza

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

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    Boolean-Vergleiche mit True sind überflüssig.
    Nimm eine For-Schleife statt Deiner If-Verschachtelung.
    Was hat es mit dem Multiselect auf sich? Wo ist das Problem dabei?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:


    Was hat es mit dem Multiselect auf sich? Wo ist das Problem dabei?


    Das "Problem" ist, dass wenn ich mehrere Zeilen auswähle, er von der untersten aus anfängt, statt von der obersten. Das heißt er pasted mir das unter meine Markierung.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Dann schau vorher die selektierten Rows durch und nimm den kleinsten Zeilenindex.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Klappt, danke!

    VB.NET-Quellcode

    1. Dim rows As DataGridViewSelectedRowCollection = DataGridView1.SelectedRows
    2. Dim list As New List(Of Integer)
    3. For Each row As DataGridViewRow In rows
    4. list.Add(row.Index)
    5. Next
    6. Dim LowestIndex As Integer = list.Min


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza