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