打开表格更快&从Combobox数据绑定中删除“System.Data.DataRowView”闪烁

时间:2016-08-23 06:19:06

标签: vb.net combobox

我的表格上有很多组合框(大约20个),所有这些组合都显示来自我的数据库的不同表格中的项目。如果我将所有代码放在Form_Load事件上,那么Form打开速度非常慢。所以我尝试粘贴不同种类的代码,目前我停留在Combobox_Enter事件 - 现在Form加载速度很快,但是当我点击组合框的下拉时,我看到有时“System.Data.DataRowView”在加载项目之前闪烁在Combobox中。有没有办法实现两者 - 快速打开和打开Combobox加载项目没有闪烁?....到目前为止,我测试了Form_Activate,Form_GotFocus(不工作)和Combobox_GotFocus,Combobox_MouseHover,Combobox_Click(不完全完美)。这是我如何绑定我的Comboboxes的一个例子:

 Private Sub Combobox1_Enter(sender As Object, e As EventArgs) Handles Combobox1.Enter

        Dim SQL As String = "SELECT Name from MyTable"

        Dim dtb As New DataTable()

        Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;")

            Try

                con.Open()

                Using dad As New OracleDataAdapter(SQL, con)
                    dad.Fill(dtb)
                End Using

                Combobox1.DataSource = dtb
                Combobox1.DisplayMember = "Name"

                con.Close()

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                con.Dispose()
            End Try

            Combobox1.SelectedIndex = -1

        End Using

End Sub

我也尝试声明“Public con As OracleConnection”,但输出与我现在的相同。

任何有用的帮助!

1 个答案:

答案 0 :(得分:1)

绑定ComboBox之类的时候,你应该总是最后设置DataSource。你不是,那就是为什么你看到" System.Data.DataRowView"显示。

当您将列表绑定到ComboBox时,控件将显示DisplayMember中指定的列或属性中的数据(如果有),否则将在每个上调用ToString项目。在您的代码中,您首先设置DataSource,此时,DisplayMember未设置,因此控件会在每个项目上调用ToString。结果是" System.Data.DataRowView"。然后,当您设置DisplayMember时,控件刚刚遇到生成和显示问题的那些值将被丢弃,DisplayMember用于获取新值。

即使你没有看到这种效果,你仍然在浪费你的控制时间来产生你不想要的价值。除非您有特殊原因,否则请始终在代码中设置DisplayMember之前设置ValueMemberDataSource等。我清楚知道的唯一原因是当您绑定CheckedListBox时,DataSource最后设置时会出现问题。

顺便说一句,如果没有已经加载的数据,那么您是否应该只在那里进行测试?如果用户返回相同的控件,您不想重新加载数据,是吗?