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