DataGridView вставка ячеек из буфера обмена - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Столкнулся с такой проблемой. Есть датагрид, из него копируются ячейки (количество и диапазон неизвестен) в буфер обмена, их нужно вставить в этот же датагрид в какое-либо другое место (на усмотрение юзера). Гуглил этот вопрос долго и упорно, но ничего лучше чем вставка всего скопированного диапазона в каждую выделенную ячейку (читай мультилайн в каждой ячейке датагрида) не получилось. Проще говоря, каждая ячейка, из всего выделенного диапазона, после комбинации Ctrl-V заполняется всем содержимым буфера обмена целиком, с переносом строки внутри ячейки (в случае если копируется и вставляется один столбец), если копируется два столбца, то значения ячеек, в пределах одной строки, вставляются через табуляцию, ну а столбцы все так же друг под другом через перенос строки. Можно каким-то образом делать вставку по принципу одно значение - одна ячейка, а не бухать в ячейку весь буфер разом? Пытался разбить текст буфера по управляющим символам "\n" и подобным, но InStr выдал 0, вставлял содержимое буфера в ворд, в начале никаких переносов строки нету, значит все верно (?), соответственно, ничего не разбилось. Код выложу завтра с утра, если нужен. зы. формат содержимого не важен, я вставлял как текст. ззы. Находил правда пару вариантов на C#, но после адаптации под бейсик они не работали, т.е. ничего вообще не вставлялось.
null

Решение задачи: «DataGridView вставка ячеек из буфера обмена»

textual
Листинг программы
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.ColumnCount = 3
        DataGridView1.Columns(0).Name = "Код студена"
        DataGridView1.Columns(1).Name = "ФИО студента"
        DataGridView1.Columns(2).Name = "Телефон"
 
        Dim row As String() = New String() {"1", "Иван И", "+79999999"}
        DataGridView1.Rows.Add(row)
        row = New String() {"2", "Серей К", "+79994399"}
        DataGridView1.Rows.Add(row)
        row = New String() {"3", "Татяна Ю", "+79994999"}
        DataGridView1.Rows.Add(row)
        row = New String() {"4", "Олга И", "+72399999"}
        DataGridView1.Rows.Add(row)
    End Sub
    Private Sub DataGridView1_KeyUp(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyUp
        If e.Control And e.KeyCode = Keys.V Then
            Dim tClipboard() As String
            Dim arT() As String
            Dim i, ii As Integer
            Dim c, cc, r As Integer
            Dim tline As String
            tClipboard = Clipboard.GetText().Split(vbLf)
            r = DataGridView1.SelectedCells(0).RowIndex
            c = DataGridView1.SelectedCells(0).ColumnIndex
            For i = 0 To tClipboard.Length - 1
                If tClipboard(i) <> "" Then
                    tline = tClipboard(i)
                    If tline.StartsWith(vbTab) = True Then
                        tline = tline.Substring(1, tline.Length - 1)
                    End If
                    arT = tline.Split(vbTab)
                    cc = c
                    For ii = 0 To arT.Length - 1
                        If cc > DataGridView1.ColumnCount - 1 Then Exit For
                        If r > DataGridView1.Rows.Count - 1 Then Exit Sub
                        With DataGridView1.Item(cc, r)
                            .Value = arT(ii).TrimStart
                            MessageBox.Show(" Index " & ii & " row " & r & " col " & cc)
                        End With
                        cc = cc + 1
                    Next
                    r = r + 1
                End If
            Next
        End If
    End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы