Home All Groups Group Topic Archive Search About

Deleting a bound DataGridView row?

Author
3 Jan 2006 9:57 AM
Michael Wong
I have a DataGridView which is bound to a dataset.

When I delete rows from the DataGridView, should it delete the same rows
from the dataset also?
I have tried the following code, but apparently, the dataset isn't
updated. Did I miss (understood) something?

for(int i = 0; i < dataGridView.SelectedRows.Count; i++)
{
    DataGridViewRow row = dataGridView.SelectedRows[i];
    dataGridView.Rows.Remove(row);
}

Debug.WriteLine(myTypedDataset.myTypedDataTable.Rows.Count.ToString());
// Here, the count is the same as before the deletion, but when
// accessing the dataTable rows, a
// DeletedRowInaccessibleException occurs on the deleted rows

Author
3 Jan 2006 12:30 PM
Bart Mermuys
Hi,

Show quote
"Michael Wong" <nospam@email.here> wrote in message
news:%23M$88wEEGHA.532@TK2MSFTNGP15.phx.gbl...
>I have a DataGridView which is bound to a dataset.
>
> When I delete rows from the DataGridView, should it delete the same rows
> from the dataset also?
> I have tried the following code, but apparently, the dataset isn't
> updated. Did I miss (understood) something?
>
> for(int i = 0; i < dataGridView.SelectedRows.Count; i++)
> {
>    DataGridViewRow row = dataGridView.SelectedRows[i];
>    dataGridView.Rows.Remove(row);
> }

This will delete the DataRows, but once you remove a DataGridViewRow from
dataGridView.Rows, then it will also be removed from SelectedRows, so the
SelectedRows.Count will decrease and not all SelectedRows will be deleted.

Use something like:
while (tbl_masterDataGridView.SelectedRows.Count > 0)
  tbl_masterDataGridView.Rows.Remove(tbl_masterDataGridView.SelectedRows[0]);

>
> Debug.WriteLine(myTypedDataset.myTypedDataTable.Rows.Count.ToString());
> // Here, the count is the same as before the deletion, but when
> // accessing the dataTable rows, a
> // DeletedRowInaccessibleException occurs on the deleted rows

That's both normal, deleted rows are still visible inside the DataTable.Rows
collection, but if you want to access their data then you must use an
overloaded version of DataRow[] which takes a DataRowVersion. Because
deleted rows only have an Original row version, example:

foreach (DataRow dr in myTypedDataset.myTypedDataTable.Rows)
{
  Console.Write(dr.RowState + " ");
  foreach (DataColumn dc in myTypedDataset.myTypedDataTable.Columns)
  {
     if (dr.RowState == DataRowState.Deleted)
       Console.Write(dr[dc, DataRowVersion.Original]+" ");
     else
       Console.Write(dr[dc]+ " ");
  }
  Console.WriteLine();
}

The deleted rows will be removed from the DataTable.Rows collection once you
perform a DataAdapter.Update or a DataTable.AcceptChanges (but don't do this
if you're planning to do a DataAdapter.Update).


HTH,
Greetings
Author
3 Jan 2006 12:50 PM
Cor Ligthert [MVP]
>
> Use something like:
> while (tbl_masterDataGridView.SelectedRows.Count > 0)
>
> tbl_masterDataGridView.Rows.Remove(tbl_masterDataGridView.SelectedRows[0]);
>
>>
Or use the For index backwards

for(int i = dataGridView.SelectedRows.Count; i < 0; i--)

Cor
Author
3 Jan 2006 4:18 PM
Joanna Carter [TeamB]
"Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> a écrit dans le message de
news: OKy%23lQGEGHA.***@TK2MSFTNGP14.phx.gbl...

| for(int i = dataGridView.SelectedRows.Count; i < 0; i--)

or possibly

for(int i = dataGridView.SelectedRows.Count; i > 0; i--)

might work better :-))

Joanna

--
Joanna Carter [TeamB]
Consultant Software Engineer
Author
3 Jan 2006 4:30 PM
Cor Ligthert [MVP]
> | for(int i = dataGridView.SelectedRows.Count; i < 0; i--)
>
> or possibly
>
> for(int i = dataGridView.SelectedRows.Count; i > 0; i--)
>
> might work better :-))
>
Without any doubt

:-)

Cor
Author
3 Jan 2006 7:11 PM
Michael Wong
Hi Bart,

It works!
Now I can continue on.

Thank you very much,

Michael

AddThis Social Bookmark Button