我正在使用vb.net。我有一个datagridview来显示数据。由于需要的datagridview一个滤波函数,我的datagridview的底层数据表和筛选表的数据的视图:vb.net我的设计datagridview的困境
PassFilter(m_table,"Price>0")
Private Sub PassFilter(ByRef dataTable As DataTable, ByVal strFilter As String) Try
Dim dataview As New DataView(dataTable)
dataview.RowFilter = strFilter
'DGVTable is my datagridview
DGVTable.DataSource = dataview
End Sub
这种运作良好。但我有下面的代码的烦恼:
Private Sub UpdateTable()
Dim row as dataRow=m_table.NewRow
row("column1")=GetText()
m_table.Rows.Add(row)
End Sub
注意的getText()似乎可以在不同的线程这是第一次在上面的代码后,返回值运行(我不明白为什么会这样,但这似乎是第二次调用GetText,它可以直接获取值)这意味着m_table中的column1第一次在上面的代码后实际上是空的,所以datagridview也是空的,因为它的数据源是m_table。我别无选择,只能再次调用上面的子更新datagridview。这是低效的。
问题是我想保持过滤器简单,那么底层表似乎是必要的。但该表没有作为控件失效。所以表不能更新值。我必须再次打电话给我的小组更新表格。
如何保持过滤器的简单性以及如何使用datagridview.invalidate更新值以便我的子不需要再次调用? 任何帮助apprecaited。
感谢您的回答。我想知道为什么每次创建新视图都不是一个好主意。我尝试了你的答案,并且像我以前的代码一样过滤得很好。我猜这样更有效率? – Summer 2012-01-17 17:53:52
那么它会更有效率,是的,也更可重用。不要这样做,如果你不需要。顺便说一句,如果我认为我理解了'显示'后1步:刷新完成是因为您更改了DataContext,并且您的DataTable中的更改没有反映出来。看来如果你使用的是DataView,你应该以不同的方式处理所有这些。我没有时间写代码/测试,但看看这个 http://msdn.microsoft.com/en-us/library/70k6287b(VS.71).aspx例如。 – GameAlchemist 2012-01-17 20:39:14
感谢您的回答。我的问题很难解释清楚。我会这样离开它。但是你的回答给了我一些我以前不知道的东西。 – Summer 2012-01-17 21:03:47