绑定Gridview时出错: "当前的TransactionScope已经完成"

13

我正在处理来自GridView的事件中级联删除。这些删除操作都在一个事务中进行。下面是简化后的代码:

protected void btnDeleteUser_Click(object sender, EventArgs e)
{
    DataContext db;
    db = new DataContext();

    using (TransactionScope ts = new TransactionScope())
    {
        try
        {
            //delete some data
            db.SubmitChanges();

            ts.Complete();
        }
        catch (Exception ex)
        {
            // handle error
        }
        finally
        {
            db.Dispose();
            BindGridView();
        }
    }
}


private void BindGridView()
{
    DataContext db;

    db = new DataContext();

    GridView.DataSource = <my query>

    GridView.DataBind();     <========Exception

    db.Dispose();
}
调用网格的DataBind()方法失败并抛出异常:"当前的TransactionScope已经完成"。为什么会这样呢?
当然,此时TransactionScope已经完成了,并且应该完成。但是当我删除TransactionScope时,它可以工作。
1个回答

17

将BindGridView()方法移出事务范围。

    using (TransactionScope ts = new TransactionScope())
    {
        try
        {
            //delete some data
            db.SubmitChanges();

            ts.Complete();
        }
        catch (Exception ex)
        {
            // handle error
        }
        finally
        {
            db.Dispose();
        }
    }
    BindGridView();

1
谢谢。这帮助解决了我遇到的问题。然而,我不确定为什么会出现这些问题。 - Phil
10
@Phil:事务提交后,GridView被绑定,但仍在事务范围内。错误信息显示:“你把它放在了事务里,但我不能执行它,因为你已经提交了事务。”既然绑定GridView不需要使用事务,那么最好将其从事务范围中隔离出来。 - Robert Harvey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接