填充DataAdapter时,ComboBox抛出ArgumentOutOfRangeException

时间:2015-10-16 13:36:58

标签: c# .net vb.net combobox

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

软件中有一个特定的UserControl,通过ComboBox向用户显示所有这些客户的下拉列表。这已通过Designer数据绑定到DataSet。这会在我的UserControl上创建CustomerDataSetCustomerTableAdapter个对象,并在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,但我无法看到特别的变化)。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

这对于表现来说太糟糕了,但在填写cboCustomer.DataSource = Nothing

后填写之前你可以cboCustomer.DataSource = dataTable