GridView中启用了删除按钮,
而GridView绑定的是一张主键表数据,
因为有其它的外键表引用该主键表的ID列,
删除GridView中的信息,就会报异常,
在用GridView控件中自带的删除按钮删除数据时,
提示用户需先删除外键引用表的数据,
否则提示不让删除的信息
应该是在什么事件里,
但不知代码该如何写。请各位有经验的大虾帮忙指点一下,
该如何解决?
而GridView绑定的是一张主键表数据,
因为有其它的外键表引用该主键表的ID列,
删除GridView中的信息,就会报异常,
在用GridView控件中自带的删除按钮删除数据时,
提示用户需先删除外键引用表的数据,
否则提示不让删除的信息
应该是在什么事件里,
但不知代码该如何写。请各位有经验的大虾帮忙指点一下,
该如何解决?
你先把外键表中的对应主键的数据全部删除
最后删除主键表的数据这是数据库错误,
然后在页面中用GridView控件绑定主键表的数据了,
在GridView控件中启用了删除按钮,
单击按钮肯定会报异常,因为主外键表都有数据,
外键表引用主键表的ID,我想在单击GridView控件上的删除按钮时,
弹框提示用户先去删除外键表的数据,
否则主键表的数据不允许删除。
去Select子表,有数据则:Response.write("该数据已被引用,不可删除!")
反之,则删除主档
只是提示用户不能删除主表(GridView)的数据,
除非没有任何从表引用的情况下。如果加try...catch语句,
也不知该在哪里捕获异常。
还是说有很多张子表引用这张主表 ?
try{
//执行删除 SQL 语句
}catch{
response.write("此数据已被引用!")
}
在RowDeleting事件里,怎么try...catch呀
你可以在删主表记录的时候先判断一下子表有没有与之相关的数据.然后提示一下
或者就try catch
把删除主档的那一段 catch 了不就行了么
我的删除语句在页面中,
try什么呀
{
try
{
//删除操作
}
catch (Exception ex)
{
//删除失败,有引用,抛出异常
}
}
删除语句也在那里面,
当我点击GridView上自带的删除按钮时,
它会自动执行删除操作,
我怎么在事件里try
可是事件里怎么处理
{
DeleteData(GridView1.DataKeys[e.RowIndex].Value.ToString());
}
private void DeleteData(string id)
{
try
{
this.SqlDataSource1.DeleteCommand = "delete from users where id="+id.ToString();
int i = this.SqlDataSource1.Delete();
Response.Write(i.ToString());
//删除操作
}
catch (Exception ex)
{
Response.Write("错误!");
//删除失败,有引用,抛出异常
}
}
但还是会自动跳转到错误页面,
不显示我自定义的信息。DELETE 语句与 COLUMN REFERENCE 约束 'FK__b__d__45F365D3' 冲突。
该冲突发生于数据库 'a',表 'b', column 'c'。
语句已终止。
看Catch的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();
}
}
放在try块中
在catch中对用户提示
然收级联删除
你出现的那个问题我以前遇到过.
1.为了不让别人看到出错信息时有坏的感觉,用
try
{}
catch(Exception ex
(
Response.Write(ex.message
)
2.在Rowdeleting事件编写代码判断是否有其他的表引用了该表中的键,如果有的话不能删除,弹出提示信息.没有的话可以删除
用代码将连接指向该页,
然后结束该页的执行,Response.End()即可。
不过刚刚终于解决了,其实很简单:
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
SXZZ的方法是正确的.其他都是放屁.
protected void gvRoom_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
if (e.AffectedRows == 0)
{
lbError.Text ="该数据已经被引用,不能删除!";
e.ExceptionHandled = true;
}
}