Lösung gesucht für Datagrid copy-paste

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Lösung gesucht für Datagrid copy-paste

    Hi Leute,

    ich suche eine Lösung um Copy paste in einen Datagrid zu implementieren. soll sich quasi wie Excel verhalten. Wenn ich etwas aus Excel kopiere, sollte ich es genauso in den datagrid einfügen lassen. Das einzigste was bedacht werden sollte ist, dass Zeilen hinzugefügt werden sollten wenn nicht ausreichend platz vorhanden ist. Der Datagrid hängt an einem Datatable aus SQL.
    Hat wer da Erfahrungen bzw. einen Code?

    Ich wäre natürlich auch für andere Optionen offen, mir fiel aber derzeit keine ein, da ich es benutzerfreundlich machen möchte und die Nutzer haben keine Ahnung von SQL und auch keine Berechtigung dafür.

    Ich habe bereits mal im Internet geschaut, für einen Datagridview habe ich diesen code gefunden, der wunderbar funktioniert, aber halt eben nicht für einen Datagrid. und diesen Umschreiben funktioniert meiner Meinung oder nach meinem wissenstand nicht so einfach ^^ bzw bekomme ich es nicht hin :P

    Quellcode

    1. Dim rowLines As String() = Clipboard.GetText(TextDataFormat.Text).Split(New String(0) {vbCr & vbLf}, StringSplitOptions.None)
    2. Dim currentRowIndex As Integer = (If(DGV.CurrentRow IsNot Nothing, DGV.CurrentRow.Index, 0))
    3. Dim currentColumnIndex As Integer = (If(DGV.CurrentCell IsNot Nothing, DGV.CurrentCell.ColumnIndex, 0))
    4. Dim currentColumnCount As Integer = DGV.Columns.Count
    5. DGV.AllowUserToAddRows = False
    6. For rowLine As Integer = 0 To rowLines.Length - 1
    7. If rowLine = rowLines.Length - 1 AndAlso String.IsNullOrEmpty(rowLines(rowLine)) Then
    8. Exit For
    9. End If
    10. Dim columnsData As String() = rowLines(rowLine).Split(New String(0) {vbTab}, StringSplitOptions.None)
    11. If (currentColumnIndex + columnsData.Length) > DGV.Columns.Count Then
    12. For columnCreationCounter As Integer = 0 To ((currentColumnIndex + columnsData.Length) - currentColumnCount) - 1
    13. If columnCreationCounter = rowLines.Length - 1 Then
    14. Exit For
    15. End If
    16. Next
    17. End If
    18. If DGV.Rows.Count > (currentRowIndex + rowLine) Then
    19. For columnsDataIndex As Integer = 0 To columnsData.Length - 1
    20. If currentColumnIndex + columnsDataIndex <= DGV.Columns.Count - 1 Then
    21. DGV.Rows(currentRowIndex + rowLine).Cells(currentColumnIndex + columnsDataIndex).Value = columnsData(columnsDataIndex)
    22. End If
    23. Next
    24. Else
    25. Dim pasteCells As String() = New String(DGV.Columns.Count - 1) {}
    26. For cellStartCounter As Integer = currentColumnIndex To DGV.Columns.Count - 1
    27. If columnsData.Length > (cellStartCounter - currentColumnIndex) Then
    28. pasteCells(cellStartCounter) = columnsData(cellStartCounter - currentColumnIndex)
    29. End If
    30. Next
    31. End If
    32. Next


    Vielen Dank für die Hilfe.
    Hallo

    r0tzi schrieb:

    Ich habe bereits mal im Internet geschaut, für einen Datagridview habe ich diesen code gefunden, der wunderbar funktioniert, aber halt eben nicht für einen Datagrid.

    Bist du sicher das du unter WPF proggst? Denn hier gibt es kein DataGridView - ausser man holt sich ne Referenz auf WinForms hinein was keinen sinn macht.

    Ich verstehe das du hier Daten aus der Zwischenablage holen und einfügen möchtest. Die frage die sich mir nur stellt ist wie das ganze nun aussieht, was für Daten das sind usw.
    Das schreibst du alles nicht. Wie ist das DataGrid gebunden? (Wenn wirklich WPF)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Also ich habe das mal gerade mit einem DataGrid und einem Binding auf eine ObservableCollection probiert. Das klappt alles "OutOfTheBox".
    Ich kann aus Excel eine Zelle kopieren und diese in eine Zelle das DataGrid einfügen. Ohne irgendein zutun.

    Du hast hier also eine eigene konstellation. Ich habe noch nie unter WPF mit einem DataSet gearbeitet und kann nicht sagen wie sich dies vehält.
    Kannst du denn die Zellen manuell bearbeiten oder hast du Bindingfehler im Ausgabefenster???

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    OK, dann weis ich bescheid.

    Gut, oben der Code (wenn ich das auf die schnelle richtig sehe) splittet die Cellen von Excel und fügt die Daten in ein DataGridView ein.
    Wie immer muss ich hier aber darauf hinweisen das wenn korrekt mit WPF gearbeitet wird, nicht das DataGrid sondern die zugrunde liegenden Daten bearbeitet werden müssen. Die WPF kümmert sich das um den rest.

    Also wohl in deinem Fall das DataTable. Du musst also deinen Code so abändern das du die Daten in deinem DataTable änderst. Wie schon gesagt, mit sowas arbeite ich nicht. Ich lade immer schlicht die Daten in Klassen und packe diese in eine ObservableCollection(Of T) und bis dann frei.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##