Click here to Skip to main content
Sign Up to vote bad
good
See more: C#3.0
Hi,
I have a datagrid of one column and many rows. Cell become editable when i click on the cell. i have a stutation in which if i edit the cell value to zero and click on the next cell then leaving cell (0.00) should be remove at that location. But movement i click on next cell cellEditEnd methos gets called and in this method i have written the code to remove the cell. But when it try to remove the cell but code datagrid.rows.RemoveAt(index) then exception throws "Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function".While googling i found many workaround for this case e.g Using beginivoke method with deegate or set focus some aother controls or Disbale the grid before the remove cell. But i didn't got the solution. Exception throws when removing the rows from the grid.
 
Below is stack trace:
 
 ---> System.InvalidOperationException: Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function.
   at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
   at System.Windows.Forms.DataGridView.OnRemovingRow(Int32 rowIndexDeleted, Point& newCurrentCell, Boolean force)
   at System.Windows.Forms.DataGridViewRowCollection.RemoveAtInternal(Int32 index, Boolean force)
   at System.Windows.Forms.DataGridViewRowCollection.RemoveAt(Int32 index)
 

 

MY code is simmilar at below:
 private void grdListItems_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
         if (cellAmt == 0)
          {
           RemoveZeroDollarEntry(e.RowIndex);
          }
         }
And 
 private void RemoveZeroDollarEntry(int rowIndex)
        {
          do something...
           grdListItems.Rows.RemoveAt(rowIndex);
        }
 
Can any one give the correct solution? please.
 
For googling i have went to below location
 
http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/f824fbbf-9d08-4191-98d6-14903801acfc/
 
http://blogs.dotnetnerds.com/steve/archive/2007/05/17/DataGridView-Reentrant-Call-Nightmare.aspx
Posted 1 Dec '11 - 19:07
Edited 1 Dec '11 - 19:13

Comments
Eduard Lu - 2 Dec '11 - 1:14
EDIT: added "pre,b,a,code" tags

2 solutions

I met a problem like that and my solution is using CellValueChanged instead of CellEndEdit.
try it
  Permalink  
Comments
mahendra_v - 5 Apr '13 - 6:57
I have used the CellValueChanged instead of CellEndEdit but throwing "Object Reference not set to an instance of an object" error message
Set False to MultiSelect Property of your datagridview.
myDataGridView.MultiSelect=false;
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Your Filters
Interested
Ignored
     
0 Sergey Alexandrovich Kryukov 586
1 Maciej Los 255
2 Slacker007 240
3 OriginalGriff 220
4 CPallini 210
0 Sergey Alexandrovich Kryukov 9,118
1 OriginalGriff 7,134
2 CPallini 3,803
3 Rohan Leuva 3,135
4 Maciej Los 2,558


Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 24 Jan 2013
Copyright © CodeProject, 1999-2013
All Rights Reserved. Terms of Use
Layout: fixed | fluid