By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,859 Members | 1,859 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,859 IT Pros & Developers. It's quick & easy.

prevent a row from being deleted in datagrid/datatable

P: n/a

Can someone give a sample to prevent a row from being deleted in a
datatable?

I tried e.Row.RejectChanges(); in dt_RowDeleting() but seems does not work.

I need verify if there other data using data in this row before actually
remove it from datagrid.

I can certainly control with Delete button. But if I want to allow the user
to use Del key on the keyboard, I lost this kind control.

Thanks,
Ryan Liu
Mar 5 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a
I notice with some dismay that the RowDeleting event isn't cancelable,
as most other "...ing" events are.

Now, I've never tried this myself, but have you tried doing an
e.Row.RejectChanges() in the dt_RowDeleted() handler, rather than the
RowDeleting() handler? It seems logical that RejectChanges wouldn't do
anything in the RowDeleting event handler, because the row is "about to
be deleted," so there is as yet no change to reject. Perhaps in the
RowDeleted() handler the change will already have happened (thus the
"...ed" ending) and it will be possible to reject it.

Good luck.

Mar 6 '06 #2

P: n/a
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

"Bruce Wood" <br*******@canada.com> ????
news:11*********************@v46g2000cwv.googlegro ups.com...
I notice with some dismay that the RowDeleting event isn't cancelable,
as most other "...ing" events are.

Now, I've never tried this myself, but have you tried doing an
e.Row.RejectChanges() in the dt_RowDeleted() handler, rather than the
RowDeleting() handler? It seems logical that RejectChanges wouldn't do
anything in the RowDeleting event handler, because the row is "about to
be deleted," so there is as yet no change to reject. Perhaps in the
RowDeleted() handler the change will already have happened (thus the
"...ed" ending) and it will be possible to reject it.

Good luck.

Mar 6 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.