dataGrid 的问题

Jonly 2002-07-03 08:52:35
当我将数据表邦定到dataGrid上并显示出来时,在dataGrid上选择一条记录然后按
Delete 键(键盘上的删除键)记录就被删除了,请问如捕捉这个事件并显示对话框,而且让该记录不被删除?
...全文
139 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jonly 2002-07-04
  • 打赏
  • 举报
回复
等了几天,终于可以了
谢谢各位
我马上散分
Jonly 2002-07-04
  • 打赏
  • 举报
回复
谢谢 superzjc(superzjc)
你看我这段代码怎么改才能实现这样的效果?

SqlConnection myConnection = new SqlConnection(...);
string sqlstrings="Select * From " + tablename;
SqlDataAdapter myCommand = new SqlDataAdapter (sqlstrings,myConnection);
DataSet ds = new DataSet();

DataTable vTable = new DataTable();

myCommand.Fill(ds, tablename);

dataGrid1.DataSource = ds.Tables[tablename].DefaultView;
dataGrid1.SetDataBinding(ds,tablename);
dataGrid1.Refresh();
Jonly 2002-07-04
  • 打赏
  • 举报
回复
谢谢 superzjc(superzjc)
你看我这段代码怎么改才能实现这样的效果?

SqlConnection myConnection = new SqlConnection(...);
string sqlstrings="Select * From " + tablename;
SqlDataAdapter myCommand = new SqlDataAdapter (sqlstrings,myConnection);
DataSet ds = new DataSet();

DataTable vTable = new DataTable();

myCommand.Fill(ds, tablename);

dataGrid1.DataSource = ds.Tables[tablename].DefaultView;
dataGrid1.SetDataBinding(ds,tablename);
dataGrid1.Refresh();
superzjc 2002-07-04
  • 打赏
  • 举报
回复
这个问题也曾经困扰过我。
解决方法是不要将DataGrid直接绑订到DataTable,先为DataTable生成一个
DataView,并指定DataView.AllowDelete=false,然后将DataGrid绑订到该
DataView。一切OK.
Jonly 2002-07-03
  • 打赏
  • 举报
回复
interim(interim) 你的提法不错,谢谢你
不过怎样才能使Delete键不可用,用C#代码如何写?
interim 2002-07-03
  • 打赏
  • 举报
回复
根据选择的行,让del button可用或不可用
Jonly 2002-07-03
  • 打赏
  • 举报
回复
非常感谢 bigtree21cn(寵物)
我用上面的代码我试过了,但确定后选择的那一行还是被删除了
解决了我马上给分
bigtree21cn 2002-07-03
  • 打赏
  • 举报
回复

private void InitDataSource(DataTable table){
table.RowDeleting+=new DataRowChangeEventHandler(this.RowDeleting);
this.dataGrid1.DataSource=table;
}

private void RowDeleting(object sender,DataRowChangeEventArgs e)
{
if(e.Action==DataRowAction.Delete){
MessageBox.Show("You can't delete this row");
e.Row.RejectChanges();
DataTable table=(DataTable)sender;
table.ImportRow(e.Row);
//i don't know how to rollback a delete operation.
}
}
Jonly 2002-07-03
  • 打赏
  • 举报
回复
在dataGrid控件上更改数据时我可以捕捉到,但删除一行时不能捕捉到。
frb_csharp 2002-07-03
  • 打赏
  • 举报
回复
但是如果用户在更改过数据后,又错误地执行了删除行的操作。。。
那就不得不改一下马上就用数据集更新数据源,毕竟不希望用户的更改无效吧!
fishdongnet 2002-07-03
  • 打赏
  • 举报
回复
你可以通过DataRowChangeEventHandler的DataRowChangeEventArgs的属性Row得到被删除的行,然后调用DataRow.RejectChanges来拒绝自上次调用 AcceptChanges 以来对该行进行的所有更改
Jonly 2002-07-03
  • 打赏
  • 举报
回复
谢谢 fishdongnet(余六.net)
能不说清楚一定
Jonly 2002-07-03
  • 打赏
  • 举报
回复
谢谢 frb_csharp(西沙坡)
这样不行,我还要修改和添加数据。
谢谢 bigtree21cn(寵物)
你说的我试过了好象不行。
frb_csharp 2002-07-03
  • 打赏
  • 举报
回复
如果已经有这个事件的话,那你选注册一下事件,然后再写事件处理程序。如下:
.....
this.dataGrid1.RowWillDelete += new EventHandler(dataGrid1_RowWillDelete);
......
private dataGrid1_RowWillDelete(object sender,System.EventArgs e)
{
MessageBox.Show("对不起,这里不允许删除记录","错误");
}
// 上面的 RowWillDelete是我随便写的一个,假定是删除记录前的一个事件,也许你要自己写这个,麻烦,还不如我上面说的那样。
fishdongnet 2002-07-03
  • 打赏
  • 举报
回复
DataTable.RowDeleting 事件。在表中的行要被删除之前发生

public event DataRowChangeEventHandler RowDeleting;

bigtree21cn 2002-07-03
  • 打赏
  • 举报
回复
在數據源 DataTable 中的 RowDeleting,RowDeleted事件.
frb_csharp 2002-07-03
  • 打赏
  • 举报
回复
这个控件有一个属性可以设置是否可以更改数据。具体:
dataGrid1.ReadOnly = true;
这样设过之后,不能在上面更改数据,当然也不能删除记录!

如果有帮助,请给点分鼓励一下!

(你说的情况,也许要写这个事件,我记得好象没有直接的,这涉及到代表和事件,就类似C++里面的指针,有一点难度!)
interim 2002-07-03
  • 打赏
  • 举报
回复
按钮得不说了
按键的,我可以先将纪录被copy在某个string or int变量里,如果安检是del,恢复一下纪录。(没测试过,你可以试);
qq 77504839

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧