DataGridViewRow的DataBoundItem属性

已知值: DataGridViewRow dataGridViewRow
条件:   DataGridView绑定到DataTable上
求:      它对应的DataRow
解答:   DataRow dataRow = (dataGridViewRow.DataBounditem as DataRowView).Row;

需要解释一下:

(1)DataGridView.CurrentRow属性暴露DataGridView的当前行,即包含用户单击的单元格的行。该属性是一个DataGridViewRow对象。

(2)以这种方式获得的DataGridViewRow对象包含一个 DataBoundItem属性,它暴露绑定到DataGridView的底层数据,负责当前行显示的数据。这个属性是object类型,因为没有限制 DataGridView必须绑定到数据库。然而,绑定到数据集时,该属性实际上是一个DataGridView对象,因此可以将它强制转换为这种类型。

找到你要删除的行,比如要删除选中行的话。关键是DataGridViewRow的DataBoundItem属性。通过他可以取得DataTable中的对应行。

DataRowView drv = xxxDgv.SelectedRows[0].DataBoundItem as DataRowView;

drv.Row就是你绑定到DataGridView的DataTable的一行。你可以对他进行任何操作了。

如果要从DataTable中删除这一行,可以drv.Row.Delete();

或者drv.Row.Table.Rows.Remove(drv.Row); 这样DataGridView中的对应行也就删掉了。

一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到DataTable后,   这个DataRow的状态就转变为Added。
当修改了这个DataRow后,这个DataRow状态转为Modified,当用DataRow.Delete()方法删除DataRow后,DataRow状态将转为Deleted,不过此行还存在在DataTable中的,只是状态改变了,这时用DataTable.Rows.Count查看行数,跟删除前是一样的。

只有在调用了DataTable.Remove(DataRow)方法后,此DataRow才被从DataTable移除,状态也回复到Detached孤立状态。但对于远程的Remoting的数据集DataTable.Remove(DataRow)方法不能从测表中移出;只能用DataRow.Delete()方法加 AcceptChanges()方法

MSDN对DataRow.Delete 方法的解释:如果行的 RowState 是“Added”,则该行将从表中移除。在使用 Delete 方法后,RowState 变成“Deleted”。在您调用 AcceptChanges 之前,它一直保持“已删除”。可通过调用 RejectChanges 取消删除行。

用Delete(),DataSet的HasChanges()=true;
用Remove(),DataSet的HasChanges()=false;

时间: 2024-08-25 06:12:32

DataGridViewRow的DataBoundItem属性的相关文章

c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index       Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); // 取得当前单元格的行 Index       Console.WriteLine(DataGridView1.CurrentCell.RowIndex); ******

C#_winform_DataGridView_的18种常见属性

C# winform DataGridView 属性说明① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行.列的隐藏和删除 ⑦ 禁止列或者行的Resize ⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整 ⑨ 冻结列或行 ⑩ 列顺序的调整                                                 ? 行头列头的单元格? 剪切板的操作 ? 单元格的ToolTip的设置 ? 右键菜

C# winform DataGridView 常见属性

C# winform DataGridView 属性说明① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行.列的隐藏和删除 ⑦ 禁止列或者行的Resize ⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整 ⑨ 冻结列或行 ⑩ 列顺序的调整 ⑪ 行头列头的单元格⑫ 剪切板的操作 ⑬ 单元格的ToolTip的设置 ⑭ 右键菜单(ContextMenuStrip)的设置 ⑮ 单元格的边框. 网格线样式的设定 ⑯ 单元格表

c# WinForm开发 DataGridView各种操作总结大全

一.单元格内容的操作 //取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); // 取得当前单元格的行 Index Console.WriteLine(DataGridView1.CurrentCell.RowIndex); 复制代码 另外,使用 DataGridView.

DataGridView很详细的用法(转载)

一.DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得.如果当前单元格不存在的时候,返回Nothing(C#是null) // 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Console.WriteLine(DataGridView1

C# DataGridView控件动态添加新行

C# DataGridView控件动态添加新行 DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如需要动态为DataGridView控件添加新行,方法有很多种,下面简单介绍如何为DataGridView控件动态添加新行的两种方法: 方法一: int index=this.dataGridView1.Rows.Add(); this.dataGridView1.Rows[index].Cells[

C#中dataGridView用法集

SqlConnection conn = new SqlConnection('Server=(local);DataBase=test;User=sa;Pwd=sa'); SqlDataAdapter da = new SqlDataAdapter('select * from test', conn); DataSet ds = new DataSet(); da.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; ① DataGridVie

DataGridView很详细的用法

DataGridiew用法总结 一.DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得.如果当前单元格不存在的时候,返回Nothing(C#是null) // 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Console.WriteLi

WinForm Control - DataGridView

http://blog.csdn.net/fangxing80/article/details/1561011 .NET 2.0 - WinForm Control - DataGridView 编程36计(一) 目录: ① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行.列的隐藏和删除 ⑦ 禁止列或者行的Resize ⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整 ⑨ 冻结列或行 ⑩ 列顺序的调整 ? 行头列头