ComboBox 在填充数据适配器时抛出 ArgumentOutOfRangeException
本文关键字:ArgumentOutOfRangeException 适配器 填充 数据 ComboBox | 更新日期: 2023-09-27 18:17:57
在一些相当成熟的软件中,我有一个设计器生成的单表数据集,在Visual Studio有点崩溃之后,我最近不得不重新创建它。这是一个非常简单的客户数据集,用于获取 ID 列、客户名称和一些联系人详细信息。
软件中有一个特定的UserControl,它通过ComboBox向用户显示所有这些客户的下拉列表。这已通过设计器数据绑定到数据集。这会在我的 UserControl 上创建CustomerDataSet
和CustomerTableAdapter
对象,并在我的 cboCustomer
ComboBox 上创建一个CustomerBindingSource
。
但是,由于重新创建数据集,加载用户控件调用
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)
的结果,则不会引发异常,并且程序正常工作。
我看不到此时使程序开始崩溃的更改(显然是数据集,但我看不到特别的更改(。有人有什么想法吗?
这对性能来说很糟糕,但你可以在填充之前cboCustomer.DataSource = Nothing
,然后在填充后cboCustomer.DataSource = dataTable