<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    I still have to clean up the code, and create a branch, and submit
    it, but i just fixed a 5 year old bug and if anyone has issues with
    how i did it here is a summary....<br>
    <br>
    the problem report is here:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="https://bugzilla.novell.com/show_bug.cgi?id=323154">https://bugzilla.novell.com/show_bug.cgi?id=323154</a><br>
    <br>
    I found by deduction that the repaint wasn't cancelling the active
    edit box after the row was deleted ..  So while the table updated,
    the edit box with the old value didn't go away...  The repaint was
    from an Invalidate call which stack trace looked something like
    this:<br>
    <br>
    System.Windows.Forms.DataGrid.CalcAreasAndInvalidate()<br>
       at System.Windows.Forms.DataGrid.RecreateDataGridRows(Boolean
    recalc)<br>
       at
    System.Windows.Forms.DataGrid.OnListManagerItemChanged(System.Object
    sender, System.Windows.Forms.ItemChangedEventArgs e)<br>
       at
    System.Windows.Forms.CurrencyManager.OnItemChanged(System.Windows.Forms.ItemChangedEventArgs
    e)<br>
       at System.Windows.Forms.CurrencyManager.UpdateIsBinding()<br>
       at
    System.Windows.Forms.CurrencyManager.ListChangedHandler(System.Object
    sender, System.ComponentModel.ListChangedEventArgs e)<br>
       at
    System.Data.DataView.OnListChanged(System.ComponentModel.ListChangedEventArgs
    e)<br>
       at System.Data.DataView.OnRowDeleted(System.Object sender,
    System.Data.DataRowChangeEventArgs args)<br>
       at
    System.Data.DataTable.OnRowDeleted(System.Data.DataRowChangeEventArgs
    e)<br>
       at System.Data.DataTable.DeletedDataRow(System.Data.DataRow dr,
    DataRowAction action)<br>
       at System.Data.DataRow.Delete()<br>
       at System.Data.DataView.Delete(Int32 index)<br>
       at System.Data.DataRowView.Delete()<br>
       at grid.ProcessCmdKey(Message ByRef msg, Keys keyData)<br>
    (etc)<br>
    <br>
    ProcessCmdKey is from user code in sample in bug report...<br>
    <br>
    After the delete, the first thing the DataGrid gets back is an
    OnListManagerItemChanged (as can be seen in stack above)...<br>
    <br>
    Before that would call RecreateDataGridRows(), if it was going to do
    that, i inserted a check to see if we're editing, and if so, i
    cancel the edit, here is a summary of what my patch will look like
    in ONListManagerItemChanged in DataGrid.cs in System.Windows.Forms
    directory:<br>
    <br>
                                    if (rows == null || RowsCount !=
    rows.Length - (ShowEditRow ? 1 : 0))<br>
    +                             {<br>
    +                                        if (is_editing)<br>
    +                                                CancelEditing ();<br>
                                             RecreateDataGridRows
    (true);<br>
    +                             }<br>
    <br>
    This solved the problem reported.  It is now identical to windows
    .net behavior from what i can see.<br>
    <br>
    I've got to clean up my debug code, and again create a github branch
    and put this change in it, unit tests ran and seem unchanged by
    this..I can't imagine a unit test for this necessarily because it's
    a visual/click-required kind of thing.<br>
  </body>
</html>