Avatar of robtrue
robtrue
Flag for United States of America asked on

DataGridView Delete Problem

I have a Datagridview control in a winForm application bound to a data adapter that references an Access 2007 table. The properties AlowUserToAddRows, AllowUserToDeleteRows, and MultiSelect are all set to True.  Everything works find except the following case:

If the user selects all the rows in the datagridview including the “*” row at the bottom of the datagridview and press the Delete key.  All the displayed records disappear and the “*” row is highlighted (selected).  Next the user clicks in the first column (or any column) of the “*” row and attempts to enter new data.  Upon depressing a keyboard key the message below appears.

    The following exception occurred in the DataGridView:

    System.IndexOutOfRangeException: Index 0 does not have a value. at
    System.Windows.Forms.CurrencyManager.get_Item(Int32 index) at
    System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(int32 rowIndex)

    To replace this default dialog please handle the DataError event.

Note: Selecting all the rows except the “*” row at the bottom of the DataGridView works as expected.  Also, selecting only the “*” row while there are other rows in the DatGridView, and pressing the delete key and entering new data works just fine.  The error happens when all rows included the “*” rows are deleted and new data is entered.

Any ideas on how to fix this problem?
Visual Basic.NETVisual C++.NETMicrosoft Development

Avatar of undefined
Last Comment
robtrue

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
rayraymp

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
robtrue

ASKER
THANKS A MILLION!!!!  The “SelectionChanged” event did the trick.  Below is my code.  
 
With DataGridView1
        ' If all rows including the "*" row (for new record) are selected,
        ' then unselect the last row to prevent index out of range error.
        If .SelectedRows.Count = .RowCount Then .Rows(.RowCount - 1).Selected = False
End With
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes