2011-12-13 57 views
0

摘要:如果我在处理完DataGridView.DataSource之后不处理BindingSource,但是如果处理它就会中断它 - 那为什么?我需要担心处置这个吗?处理BindingSource中断DataGridView数据源

Public Sub GridViewUpdate() 
     Dim cn As New System.Data.SqlServerCe.SqlCeConnection 
     Dim SQL As System.Data.SqlServerCe.SqlCeCommand 
     Dim tbl As New DataTable 
     Dim adp As System.Data.SqlServerCe.SqlCeDataAdapter 
     Dim Bds As New BindingSource 

     DataGridView1.Columns.Clear() 

     cn.ConnectionString = "Data Source = C:\path\data.sdf" 
     SQL = cn.CreateCommand 
     SQL.CommandText = "SELECT myfields FROM myTable ORDER BY field1 DESC, field2 ASC" 
     cn.Open() 
     adp = New SqlServerCe.SqlCeDataAdapter(SQL) 
     adp.Fill(tbl) 
     Bds.DataSource = tbl 

     DataGridView1.DataSource = Bds 

     cn.Close() 
     cn.Dispose() 
     SQL.Dispose() 
     adp.Dispose() 
     tbl.Dispose() 
     Bds.Dispose() '*** <<--- This breaks it - GridView becomes empty 

End Sub 

那么,这里发生了什么?当我设置DataGridView1.DataSource = Bds它只是做这个作为参考? Bds在程序退出后如何处置?如果我为DataGridView1.DataSource指定了其他内容,垃圾收集是否会将其提取出来?我需要担心这个吗?

回答

0

啊,心动不如行动!

DataGridView1.DataSource = Bds.DataSource

我想用= BDS刚刚创建了一个参考,但= Bds.DataSource没有。

处理BindingSource不会导致这种问题。

0

是的数据源被引用到你的Datatable。 刚刚尝试

Bds.DataSource = tbl.copy

+0

这不起作用 - 问题在于处理Bds时,而不是tbl。想通了 - 虽然 - 张贴我自己的答案在下面。 –