Добавление новой строки в DatagridView - Visual Basic .NET (63875)
Формулировка задачи:
День добрый. Была уже такая тема от Zaharius, однако повис в воздухе такой вопрос:
И вопрос этот очень насущный ибо я мониторю СОМ порт и добавляю данные в таблицу построчно, однако новые строки не появляются и это не хорошо.
Вопрос как у Zaharius. Как с имитировать ручной ввод символов в ячейку?
Заранее спасибо
Неужели нельзя никак программно вызвать появление новой пустой строки в связанном датагриде? Иными словами, как симитировать ручной ввод символов в ячейку?
Листинг программы
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- DataGridView1.Columns.Add(0, "UID")
- DataGridView1.Columns.Add(1, "№")
- End Sub
- Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- Dim aa As String = SerialPort1.ReadLine()
- DataGridView1.Item(0, stroki).Value = aa
- DataGridView1.Rows.Add() ' <- вот именно это не хочет делать
- 'MsgBox(aa)
- stroki += 1
- End Sub
Решение задачи: «Добавление новой строки в DatagridView»
textual
Листинг программы
- Public Class Form1
- 'Событие, возникающее в другом потоке
- Private Event ThreadEvent As EventHandler
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- 'Создаём поток
- Dim t As New Thread(AddressOf ThreadProcedure)
- 'Привязываемся к событию.
- AddHandler ThreadEvent, AddressOf AddRow
- 'Запускаем поток
- t.Start()
- For i As Integer = 0 To 10
- 'Вызов события из одного с контролом потока
- RaiseEvent ThreadEvent(Me, New EventArgs())
- Thread.Sleep(200)
- Application.DoEvents()
- Next
- End Sub
- 'Делегат, который должен выполниться
- Dim _act As New Action(Of Integer)(Sub(i)
- Dim n = DataGridView1.Rows.Add()
- DataGridView1(0, n).Value = i
- End Sub)
- 'Метод, вызываемый в событии
- Private Sub AddRow(sender As Object, e As EventArgs)
- 'Нужно ли вызывать делегат для другого потока?
- If DataGridView1.InvokeRequired Then
- 'Вызов делегата
- DataGridView1.Invoke(_act, 1)
- Else
- 'Вызов делегата, если метод AddRow вызван из того же потока, что и контрол
- _act(0)
- End If
- End Sub
- 'Метод, выполняемый в другом потоке
- 'Каждые полсекунды вызываем некое событие
- Private Sub ThreadProcedure()
- For i As Integer = 0 To 10
- RaiseEvent ThreadEvent(Me, New EventArgs())
- Thread.Sleep(500)
- Next
- End Sub
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д