0

我试图找到一个解决方案,所以请先检查您的问题!我尝试过,BindingSource但没有用。我试图将 绑定到after each 循环。问题是即使数据在那里,内容也不会更新。它只有深灰色。如果在将一些数据添加到 my 后用鼠标调整列/行的大小,则会很好地更新并且所有行都会出现!DataGridViewDataTableDataGridViewDataSourceDataGridViewDataTableDataGridView

这是我的一些代码:

Public Class DatagridviewComponent
dim sataSet as New DataTable
Public Sub New()
 InitializeComponent()
 me.dataSet.Columns.Add("Name", GetType(String))
 DataGridViewProcesses.DataSource = dataSet
End Sub

所以,一个简单的DataGridView绑定到一个DataTable. 现在,我在那之后做什么...

Public Sub UpdateData(ByVal str As String)
 For i as integer = 0 to dataSet.Rows.Count -1
  If dataSet.Rows(i)(0).ToString = str Then
   dataSet.Rows(i)(0) = str
   Exit Sub
  End If
 Next
dataSet.Rows.Add(str)
End Sub

所以,我检查我是否已经有一条线被调用str并覆盖。如果str是新项目,我将其添加到dataSet. 这是一个示例,不是我的实际代码,但我认为这应该说明我遇到的问题。关于这个主题有很多问题,但我没有找到任何可行的解决方案。

4

2 回答 2

1

Me.Refresh()添加 aDataRowDataTable.

像这样:

Public Sub UpdateData(ByVal str As String)
 For i as integer = 0 to dataSet.Rows.Count -1
  If dataSet.Rows(i)(0).ToString = str Then
   dataSet.Rows(i)(0) = str
   parent.RefreshForm()
   Exit Sub
  End If
 Next
dataSet.Rows.Add(str)
parent.RefreshForm()
End Sub

父级是 Form1。在 Form1 我现在有这个:

  Public Delegate Sub RefreshFormDelegate()
  Public Sub RefreshForm()
    If Me.InvokeRequired Then
      Me.Invoke(New RefreshFormDelegate(AddressOf RefreshForm))
      Return
    End If
    Me.Refresh()
  End Sub

现在,DataGridView在我在DataTable. 我不需要使用BindingSource. 不管有没有,都是一样的BindingSource

但是现在仍然存在一个问题:我DataGridView的被冻结了,没有滚动条(就像应该有的那样)并且我无法选择一行,除非我首先调整列大小或对列进行排序......很难解释,但它仍然是一个问题!

于 2013-10-17T11:17:05.130 回答
0

您的示例代码中有很多语法错误,我只能假设这是在这里编写的,而不是在 VB 中然后复制的。但是忽略它们,您的问题与作为网格数据源的数据表没有实现INotifyCollectionChanged的​​事实有关,这意味着它不会告诉网格您添加了新行。正如您所说您已经尝试过,您需要使用ObservableCollection或 BindingSource 之类的东西。

知道您已经尝试过,我只能假设您没有正确使用它。将网格的数据源设置为绑定源,然后在数据表中添加新行时,还必须将其添加到 BindingSource。

希望这可以帮助您走上正确的道路。

于 2013-10-11T14:19:15.007 回答