I tried dt_RowDeleted() , but does not work really well.
The row still "disappear" from datagrid, even it is in datatable.
Even I try to set data grid's DataSource back again or call
dataGrid.Refresh(), or sort the grid,
neither way helps.
The row is still "seems" deleted from the datagrid, I mean, not visible.
But when I click the datagrid "existing data area", the missing row come
back!!
So now I need somehow make a fake mouse click to simulate this action. I
haven't finger out how yet.
By the way, I find I ofter need do this kind of fake action in code. I
thought EndEdit() could help, but does not.
For example, I want something to happen when the user click on a cell. But
Mouse event is not always fired if the current cell hasn't changed, I need
change current cell to someother cell in my code to make mouse down event
always triggered.
Another example is, when I try to move a row up and down in a datagrid, it
does not work well if there is a cell is seleted(even this column is read
only), I need use code to select whole line so no CurrentCell selected.
Oh, there is another thing, to get data in a deleted datarow, I forget to
use DataRowVersion, so there was an exception. But this exception is not
"throw" in the event dt_RowDeleted( ), it is an slient exception!! Take me a
while to find out the mysterious behavior.
private void dt_RowDeleted(object sender, DataRowChangeEventArgs e)
{
int id= (int)e.Row["id", DataRowVersion.Original];
if(id >5)
{
e.Row.RejectChanges();
MessageBox.Show(this, "Can not delete!"); //this worked,
message showed
//this.dataGrid.DataSource = this.dt.DefaultView; //set
DataSource again, but does not help
//this.dataGrid.Refresh();
//does not help
//this.dt.DefaultView.Sort = "id ASC"; //does
not help
}
}
Thanks,
Ryan Liu