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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д