Добавление новой строки в DatagridView - Visual Basic .NET (63875)

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

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

День добрый. Была уже такая тема от Zaharius, однако повис в воздухе такой вопрос:
Неужели нельзя никак программно вызвать появление новой пустой строки в связанном датагриде? Иными словами, как симитировать ручной ввод символов в ячейку?
И вопрос этот очень насущный ибо я мониторю СОМ порт и добавляю данные в таблицу построчно, однако новые строки не появляются и это не хорошо. Вопрос как у Zaharius. Как с имитировать ручной ввод символов в ячейку?
Заранее спасибо

Решение задачи: «Добавление новой строки в 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

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


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

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

9   голосов , оценка 3.889 из 5