GridView中单击删除按钮出现异常

whyabc 2008-05-22 05:08:59
GridView中启用了删除按钮,
而GridView绑定的是一张主键表数据,
因为有其它的外键表引用该主键表的ID列,
删除GridView中的信息,就会报异常,
在用GridView控件中自带的删除按钮删除数据时,
提示用户需先删除外键引用表的数据,
否则提示不让删除的信息
应该是在什么事件里,
但不知代码该如何写。

请各位有经验的大虾帮忙指点一下,
该如何解决?
...全文
496 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihuo 2009-04-05
  • 打赏
  • 举报
回复
楼主把问题写的那么清楚,你们底下那些回帖的都没有认真看,回答的是很认真,但是除了SXZZ外,其他都是答非所问.
SXZZ的方法是正确的.其他都是放屁.
protected void gvRoom_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
if (e.AffectedRows == 0)
{
lbError.Text ="该数据已经被引用,不能删除!";
e.ExceptionHandled = true;
}
}
sxzz 2008-07-22
  • 打赏
  • 举报
回复
好多人都没有理解lz的意思,我也是遇到这个问题找到这里,没有一个是正解.所以lz我们是同病相怜呀
不过刚刚终于解决了,其实很简单:
Protected Sub SqlDsUser_Deleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDsUser.Deleted
If e.AffectedRows = 0 Then '此处判断条件也可以e.ExceptionHandled = False
MsgBox("此数据已被引用,不能删除!")
' MsgBox(e.Exception.ToString)'这里可以捕捉异常
e.ExceptionHandled = True
End If
End Sub
whyabc 2008-06-14
  • 打赏
  • 举报
回复
在catch中
用代码将连接指向该页,
然后结束该页的执行,Response.End()即可。
river2ding 2008-05-24
  • 打赏
  • 举报
回复
用try...catch,上面都有N多正确答案 汗。。
w511325 2008-05-24
  • 打赏
  • 举报
回复
对于你这个问题,我的思路是
你出现的那个问题我以前遇到过.
1.为了不让别人看到出错信息时有坏的感觉,用
try
{

}
catch(Exception ex
(
Response.Write(ex.message
)
2.在Rowdeleting事件编写代码判断是否有其他的表引用了该表中的键,如果有的话不能删除,弹出提示信息.没有的话可以删除
jimmy_jpy 2008-05-23
  • 打赏
  • 举报
回复
rowdelet里写,然后就是获取删除的行的主键信息,然后删除就可以了,普通的删除信息的功能
LeeeeSin 2008-05-23
  • 打赏
  • 举报
回复
先把跟你这主键有关的其它表里的数据删了。。再删这个主键的数据就OK了,

跟Gridview没啥关系的。
dgdlxh 2008-05-23
  • 打赏
  • 举报
回复
你可以用模版来做啊. 放一个linkbutton 然后在他的rowcommand 事件里做删除,判断.或者在数据库中做级联删除.
whyabc 2008-05-23
  • 打赏
  • 举报
回复
那你有什么好的方法
qilinshu 2008-05-23
  • 打赏
  • 举报
回复
应该是数据库的问题吧? 有了约束,4楼的方法不推荐,不过可行
Janyue 2008-05-23
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 yanzhibo 的回复:]
可是页面还是会继续往下执行,我根本没有看到弹框,
程序从弹框的代码走,
然后页面转到抛出异常的页面啦
[/Quote]
lfhlyx 2008-05-23
  • 打赏
  • 举报
回复
学无止境
whyabc 2008-05-23
  • 打赏
  • 举报
回复
可是页面还是会继续往下执行,我根本没有看到弹框,
程序从弹框的代码走,
然后页面转到抛出异常的页面啦
wangshikang_it 2008-05-23
  • 打赏
  • 举报
回复
学习了
sunnyultra 2008-05-23
  • 打赏
  • 举报
回复
这问题楼上的大虾讲得非常明白了!
另外建立你先熟悉这些控件和数据库的细节和知识,不要一开始就喜欢用自动生成的,自个还不明白它是如何个自动法,出现问题束手无策!
oyjd614 2008-05-23
  • 打赏
  • 举报
回复
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string KeyId = GridView1.DataKeys[e.RowIndex].Value.ToString();
string DeleteStr = "DELETE FROM Suppliers WHERE SupplierID='" + KeyId + "'";
SqlConnection DeleteCon = new SqlConnection(ConStr);
SqlCommand DeleteCmd = new SqlCommand(DeleteStr, DeleteCon);
try
{
DeleteCon.Open();
DeleteCmd.ExecuteNonQuery();
BindGridView();
Literal TxtMsg = new Literal();
TxtMsg.Text = "<script>alert('删除成功')</script>";
Page.Controls.Add(TxtMsg);
}
catch (Exception ex)
{
Literal TxtMsg = new Literal();
TxtMsg.Text = "<script>alert('删除出错,请检查数据是否有关联')</script>";
Page.Controls.Add(TxtMsg);
}
finally
{
DeleteCon.Dispose();
}
}
zsj830120 2008-05-23
  • 打赏
  • 举报
回复
晕了,自己跟踪代码
看Catch的e得到的错误信息是什么。


自己跟踪一下
chen_dian_dian 2008-05-23
  • 打赏
  • 举报
回复
把执行删除操作的代码
放在try块中
在catch中对用户提示
然收级联删除
fanggao175 2008-05-23
  • 打赏
  • 举报
回复
【程序员技术论坛10132922】
whyabc 2008-05-22
  • 打赏
  • 举报
回复
我试了试,虽然程序从catch块过,
但还是会自动跳转到错误页面,
不显示我自定义的信息。

DELETE 语句与 COLUMN REFERENCE 约束 'FK__b__d__45F365D3' 冲突。
该冲突发生于数据库 'a',表 'b', column 'c'。
语句已终止。
加载更多回复(27)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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