在 GridView 更新后覆盖 editindex

3
我有一个GridView控件与数据源相连,并允许对行进行编辑。我使用标准的编辑/保存/删除按钮,这些按钮都指向Update、Cancel和edit GridView命令。
我想添加一个额外的按钮"Next",放在保存/取消按钮旁边。它的功能与保存按钮相同,但会新增一行记录到网格中,并将该行放入编辑模式。为此,我已经在GridView的Updated事件中添加了代码,用于向数据库添加新记录、重新绑定网格,并设置EditIndex。看起来似乎可以正常工作,但网格实际上并没有停留在编辑模式。我删掉了添加新记录的代码,只留下设置EditIndex的语句,但网格仍然无法保持在编辑模式。
在这种情况下,是否有可能强制网格保持在编辑模式?看起来除非你设置GridViewUpdatedEventArgs的cancel属性,否则网格将自动切换到查看模式。但我不想在这种情况下设置cancel属性,因为我希望GridView触发我的数据源对象保存记录。
如果这种方法行不通,似乎我需要允许更新正常进行,然后返回客户端并发送另一个服务器请求来添加记录。但我不想这样做,我希望在一个回合的上下文中执行必要的操作。
以下是简化后的代码:
protected void Button1_Click(object sender, EventArgs e)
    {
        // Works Fine
        this.sampleDataSource.Insert();
        this.sampleGridView.DataBind();
        this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
    }

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        // Grid will display new row, but will not be in edit mode
        this.sampleDataSource.Insert();
        this.sampleGridView.DataBind();
        this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
    }
3个回答

1

我找到了一个似乎能够满足我的需求的解决方案。基本上,我需要让GridView执行正常的事件序列,然后设置编辑索引。以下是代码,再次简化:

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        this.insertNewRow = true;
    }

protected void Page_LoadComplete(object sender, EventArgs e)
    {
        if (this.insertNewRow)
        {
            this.sampleDataSource.Insert();
            this.sampleGridView.DataBind();
            this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
        }     
    }

0

我们可能需要看一些代码……但是,根据您的描述,我可以猜出问题出在哪里。您可能需要在重新绑定之前设置EditIndex。如果这不起作用(超出范围异常?),那么您将不得不调用DataBind()来获取新行,设置EditIndex,再次调用DataBind()。

不幸的是,仅仅设置EditIndex并不能真正完成工作。您必须设置索引并调用DataBind()。


我已经有一个可以自动插入新行并切换到编辑模式的工作方法。但是,我一直在GridView上下文之外调用它。当我尝试在GridView更新过程中执行此操作时,EditIndex要么不起作用,要么被更新过程覆盖。我不确定这是否是绑定问题,但我肯定会尝试解决它。我还将尝试提供一个简化的问题示例。 - Brian Vander Plaats
1
重新阅读你的问题后,我发现你正在使用一些自动绑定和更新功能。而我通常避免这样做,并在代码后台处理这些任务......就是为了这个原因。当事情不起作用时,通过代码更容易看出哪里出了问题。 - Bryan

0
我遇到了设置所需索引的类似问题,这个解决方案对我有用:
grdProjectsForSubmiting - 用于显示数据的GridView
grdProjectsForSubmiting.EditIndex = neededIndex; // 不要忘记,行号从0开始而不是1 !! grdProjectsForSubmiting.DataSource = ProjectsController.SessionTodayEntries; grdProjectsForSubmiting.DataBind();

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