【问题标题】:Overriding the editindex after a GridView update在 GridView 更新后覆盖 editindex
【发布时间】:2010-02-12 21:51:58
【问题描述】:

我有一个 GridView 控件连接到我允许行编辑的数据源。我使用指向更新、取消和编辑 GridView 命令的标准编辑/保存/删除按钮。

我想在保存/取消按钮中添加一个附加按钮,即“下一步”。这将与保存按钮的功能相同,但还会向网格添加额外的行,并将该行置于编辑模式。为此,我在 GridView 的 Updated 事件中添加了代码,该事件将新记录添加到 db、重新绑定网格并设置 editindex。这似乎可行,但网格实际上并没有在编辑模式下返回。我去掉了新的记录代码,只留下了设置编辑索引的语句,但网格仍然不会停留在编辑模式。

在这种情况下是否可以强制网格保持编辑模式?看来除非您设置GridViewUpdatedEventArgs 的取消属性,否则网格将翻转到查看模式。在这种情况下,我不想设置取消属性,因为我希望 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;
    }

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    我找到了一个似乎可以满足我要求的解决方案。基本上我需要让GridView通过正常的事件序列,然后设置editindex。这是代码,再次简化:

    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;
            }     
        }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我已经有了一种插入新行并自动翻转到编辑模式的工作方法。但是,我一直在 gridview 上下文之外调用它。当我尝试在 GridView 更新过程中执行此操作时,EditIndex 要么不起作用,要么被更新过程覆盖。我不确定这是否是一个有约束力的问题,但我肯定会解决这个问题。我也会尝试提出一个问题的简明示例
      • 重新阅读您的问题后,我可以看到您正在使用一些自动魔术数据绑定和更新。我自己通常会避免这种情况,并在代码隐藏中处理这些任务......正是出于这个原因。当事情不起作用时,更容易发现问题所在。
      【解决方案3】:

      我在设置所需索引时遇到了类似的问题。这个解决方案对我有用: grdProjectsForSubmiting - 用于显示数据的 GridView

      grdProjectsForSubmiting.EditIndex = requiredIndex; // 不要忘记,行从 0 开始枚举,而不是从 1 开始!!
      grdProjectsForSubmiting.DataSource = ProjectsController.SessionTodayEntries;
      grdProjectsForSubmiting.DataBind();

      【讨论】:

        猜你喜欢
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多