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

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

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

День добрый. Была уже такая тема от Zaharius, однако повис в воздухе такой вопрос:
Неужели нельзя никак программно вызвать появление новой пустой строки в связанном датагриде? Иными словами, как симитировать ручной ввод символов в ячейку?
И вопрос этот очень насущный ибо я мониторю СОМ порт и добавляю данные в таблицу построчно, однако новые строки не появляются и это не хорошо. Вопрос как у Zaharius. Как с имитировать ручной ввод символов в ячейку?
Листинг программы
  1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2. DataGridView1.Columns.Add(0, "UID")
  3. DataGridView1.Columns.Add(1, "№")
  4.  
  5. End Sub
  6. Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
  7. Dim aa As String = SerialPort1.ReadLine()
  8. DataGridView1.Item(0, stroki).Value = aa
  9. DataGridView1.Rows.Add() ' <- вот именно это не хочет делать
  10. 'MsgBox(aa)
  11.  
  12. stroki += 1
  13. End Sub
Заранее спасибо

Решение задачи: «Добавление новой строки в DatagridView»

textual
Листинг программы
  1. Public Class Form1
  2.     'Событие, возникающее в другом потоке
  3.     Private Event ThreadEvent As EventHandler
  4.  
  5.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  6.         'Создаём поток
  7.         Dim t As New Thread(AddressOf ThreadProcedure)
  8.         'Привязываемся к событию.
  9.         AddHandler ThreadEvent, AddressOf AddRow
  10.         'Запускаем поток
  11.         t.Start()
  12.  
  13.         For i As Integer = 0 To 10
  14.             'Вызов события из одного с контролом потока
  15.             RaiseEvent ThreadEvent(Me, New EventArgs())
  16.             Thread.Sleep(200)
  17.             Application.DoEvents()
  18.         Next
  19.     End Sub
  20.  
  21.     'Делегат, который должен выполниться
  22.     Dim _act As New Action(Of Integer)(Sub(i)
  23.                                            Dim n = DataGridView1.Rows.Add()
  24.                                            DataGridView1(0, n).Value = i
  25.                                        End Sub)
  26.  
  27.     'Метод, вызываемый в событии
  28.     Private Sub AddRow(sender As Object, e As EventArgs)
  29.         'Нужно ли вызывать делегат для другого потока?
  30.         If DataGridView1.InvokeRequired Then
  31.             'Вызов делегата
  32.             DataGridView1.Invoke(_act, 1)
  33.         Else
  34.             'Вызов делегата, если метод AddRow вызван из того же потока, что и контрол
  35.             _act(0)
  36.         End If
  37.     End Sub
  38.  
  39.     'Метод, выполняемый в другом потоке
  40.     'Каждые полсекунды вызываем некое событие
  41.     Private Sub ThreadProcedure()
  42.         For i As Integer = 0 To 10
  43.             RaiseEvent ThreadEvent(Me, New EventArgs())
  44.             Thread.Sleep(500)
  45.         Next
  46.     End Sub
  47. End Class

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут