ComboBox 在填充数据适配器时抛出 ArgumentOutOfRangeException

本文关键字:ArgumentOutOfRangeException 适配器 填充 数据 ComboBox | 更新日期: 2023-09-27 18:17:57

在一些相当成熟的软件中,我有一个设计器生成的单表数据集,在Visual Studio有点崩溃之后,我最近不得不重新创建它。这是一个非常简单的客户数据集,用于获取 ID 列、客户名称和一些联系人详细信息。

软件中有一个特定的UserControl,它通过ComboBox向用户显示所有这些客户的下拉列表。这已通过设计器数据绑定到数据集。这会在我的 UserControl 上创建CustomerDataSetCustomerTableAdapter对象,并在我的 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)的结果,则不会引发异常,并且程序正常工作。

我看不到此时使程序开始崩溃的更改(显然是数据集,但我看不到特别的更改(。有人有什么想法吗?

ComboBox 在填充数据适配器时抛出 ArgumentOutOfRangeException

这对性能来说很糟糕,但你可以在填充之前cboCustomer.DataSource = Nothing,然后在填充后cboCustomer.DataSource = dataTable

相关文章:
  • 没有找到相关文章