在一些相当成熟的软件中,我有一个设计器生成的单表DataSet,我最近不得不在Visual Studio崩溃之后重新创建。它是一个足够简单的客户数据集,可以获取ID列,客户名称和一些联系人详细信息。
软件中有一个特定的UserControl,通过ComboBox向用户显示所有这些客户的下拉列表。这已通过Designer数据绑定到DataSet。这会在我的UserControl上创建CustomerDataSet
和CustomerTableAdapter
个对象,并在CustomerBindingSource
ComboBox上创建cboCustomer
。
但是,重新创建DataSet后,加载UserControl会调用
Me.CustomerTableAdapter.Fill(Me.CustomerDataSet.customer)
调用设计器生成的例程:
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0"), _
Global.System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter"), _
Global.System.ComponentModel.DataObjectMethodAttribute(Global.System.ComponentModel.DataObjectMethodType.Fill, True)> _
Public Overridable Overloads Function Fill(ByVal dataTable As CustomerDataSet.customerDataTable) As Integer
Me.Adapter.SelectCommand = Me.CommandCollection(0)
If (Me.ClearBeforeFill = True) Then
dataTable.Clear()
End If
Dim returnValue As Integer = Me.Adapter.Fill(dataTable)
Return returnValue
End Function
当代码命中时:
Dim returnValue As Integer = Me.Adapter.Fill(dataTable)
cboCustomer
抛出异常:
System.ArgumentOutOfRangeException occurred
HResult=-2146233086
Message=InvalidArgument=Value of '0' is not valid for 'SelectedIndex'.
Parameter name: SelectedIndex
ParamName=SelectedIndex
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
InnerException:
但是,如果我快速观察Me.Adapter.Fill(dataTable)
的结果,则不会抛出异常并且程序正常工作。
我无法看到发生了什么变化,使程序在此时开始崩溃(显然是DataSet,但我无法看到特别的变化)。有没有人有任何想法?
答案 0 :(得分:1)
这对于表现来说太糟糕了,但在填写cboCustomer.DataSource = Nothing
cboCustomer.DataSource = dataTable