Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

DataGridView Delete Problem

Posted on 2011-03-08
2
Medium Priority
?
853 Views
Last Modified: 2012-05-11
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?
0
Comment
Question by:robtrue
2 Comments
 
LVL 1

Accepted Solution

by:
rayraymp earned 2000 total points
ID: 35088167
If I am correct, by "deleting" the "*" row, you would be throwing off the index of the table.  Try something like the following as a handle for something like "selectionChanged" or "multipleSelected" or an event such as that to lock the "*" cells (it can be modified to do a whole row):

If e.RowIndex < rowcount Then
DataGridView1.Item(e.ColumnIndex, e.RowIndex).ReadOnly = True
End If
0
 

Author Comment

by:robtrue
ID: 35094908
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
0

Featured Post

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

With most software applications trying to cater to multiple user needs nowadays, the focus is to make them as configurable as possible. For e.g., when creating Silverlight applications which will connect to WCF services, the service end point usuall…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Integration Management Part 2

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question