Fix for error during Binding...Parameter name: '-2147483550' is not a valid value for 'index'.

J

JSantora

Essentially, InsertAT is broken!

For the past couple of hours, I've been getting this "Parameter name:
'-2147483550' is not a valid value for 'index'." error.
Apparently, its caused by having manually inserted a row in the table
bound to the Combo box. The InsertAt Method of adding a row just does
not work.

Hope this helps anyone with this problem.
john


' first, build the row you want to manually add to your Combo,
using this method. in our case we needed a row with a NULL value, so
NULL values in the DB can be bound to the Combo.
ds.Tables.Add("Show")
ds.Tables("show").Columns.Add("ShowName")
ds.Tables("show").Columns.Add("ShowID")
Dim row As DataRow
row = ds.Tables("Show").NewRow
row("ShowName") = ""
row("ShowID") = DBNull.Value
ds.Tables("Show").Rows.Add(row)

' now add in the rest of the rows from the lookup table.
Dim cmd As SqlDataAdapter = New
SqlDataAdapter("f_TABill_GetRecentShowNames", cn1)
With cmd.SelectCommand
.Parameters.Add(New SqlClient.SqlParameter("@DaysToGet",
nDaysToGet))
.Parameters.Add(New
SqlClient.SqlParameter("@GetThisPUShowIDToo", GetThisPUShowIDToo))
.Parameters.Add(New
SqlClient.SqlParameter("@GetThisDELShowIDToo", GetThisDELShowIDToo))
.CommandType = CommandType.StoredProcedure
End With

cmd.Fill(dsShows, "show")


' following method for adding a row to the DS DOES NOT WORK!!!!!!!!
' INTERNALLY, IT MUST BE SCREWING UP THE DATA TABLE BECAUSE THE BINDING
MECHANISM GOES NUTS
' WHEN TRYING TO BIND TO THE THIS MANUALLY INSERTED ROW.
' Dim dr As DataRow
' dr = dsShows.Tables("show").NewRow()
' dr.Item("ShowID") = DBNull.Value
' dr.Item("ShowName") = ""

' dsShows.Tables("show").Rows.InsertAt(dr, 0) << tried
this, got following error
Specified argument was out of the range of valid values.

Parameter name: '-2147483550' is not a valid value for 'index'.
Error ID: EJB0501281707 ComboBox=cboPUShow
Version: 10.0.0.80
Source: System
TargetSite: Void SetValue(System.Object, System.Object)
Stack: at
System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object
component, Object value)


' dsShows.Tables("show").Rows.InsertAt(dr, 6) << tried
this too, got a different error below
DataBinding could not find a row in the list that is suitable for all
bindings
Error ID: EJS0503151000
Version: 10.0.0.80
Source: System.Windows.Forms
TargetSite: Void FindGoodRow()
Stack: at System.Windows.Forms.CurrencyManager.FindGoodRow()


With cboPUShow
.DisplayMember = "ShowName" ' Case Sensitive or
you'll get weird stuff in the dropdown.
.ValueMember = "ShowID" ' Case Sensitive or
you'll never debug this!
.DataSource = New DataView(dsShows.Tables("show"))
.SelectedIndex = -1 ' this clears the
current index, but does not trigger _Validating.
.SelectedIndex = -1 ' this clears the
current index, but does not trigger _Validating.
End With

Hi,

I have this binding exception I can't figure out.
What I want is to show a list of parent records in a drop combo, and
add a single line, like "Not used" item.
Summary:
Adding a row to the top of a filled table, using "table.Rows.InsertAt(row, 0);"
and binding a combobox's SelectedValue throws an exception.
If I use the same InsertAt method, but add the row at another position, it works fine.

Explanation:
I use a DataTable filled with the SQL query result. The table has 2 columns:
An columnID (int) and a columnName (string) column.
the columnID is actually the primary key field of the file.

I bind a class property (int) to the value (this refers to a ComboBox derived class instance)

this.DataSource = <My DataTable, columns[0] = int, columns[1] = string>
this.DisplayMember = columnName
this.ValueMember = columnID

this.DataBindings.Add("SelectedValue", businessObject, "Prop");

and businessObject has an int property Prop { get; set; }.

Now what works is adding the "Not used" item like this:

DataRow row = table.NewRow();
row[0] = (int)(-1);
row[1] = (string)"Not used";
table.Rows.InsertAt(row, 1); // Add at position 1, that's not the top !!!
table.AcceptChanges();

what does *not* work is:
DataRow row = table.NewRow();
row[0] = (int)(-1);
row[1] = (string)"Not used";
table.Rows.InsertAt(row, 0); // Add at position 0, that the top and throws exception
table.AcceptChanges();

Any ideas?
TIA
Ronald

exceptions is like this:

System.ArgumentOutOfRangeException: Het opgegeven argument ligt
buiten het bereik van geldige waarden.
Parameternaam: -2147483648 is geen geldige waarde voor index.
at System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
at System.Windows.Forms.Binding.SetPropValue(Object value)
at System.Windows.Forms.Binding.PushData()
at System.Windows.Forms.Binding.UpdateIsBinding()
at System.Windows.Forms.Binding.CheckBinding()
at System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding
dataBinding)
at System.Windows.Forms.BindingsCollection.Add(Binding binding)
at
System.Windows.Forms.BindingContext.UpdateBinding(BindingContext
newBindingContext, Binding binding)
at System.Windows.Forms.Binding.SetControl(Control value)
at System.Windows.Forms.ControlBindingsCollection.AddCore(Binding dataBinding)
at System.Windows.Forms.ControlBindingsCollection.Add(Binding binding)
at System.Windows.Forms.ControlBindingsCollection.Add(String
propertyName, Object dataSource, String dataMember)
----> This is my call:
at Compad.Forms.ComboBox.Bind(IBusinessObject
primaryBusinessObject)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top