2010-02-12 119 views
3

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

我想添加一个额外的按钮,“下一步”内嵌保存/取消按钮。这将与保存按钮功能相同,但也会向网格添加一行,并将该行放入编辑模式。为此,我将代码添加到GridView的Updated事件中,该事件向db添加新记录,重新绑定网格并设置editindex。这似乎工作,但网格实际上并没有在编辑模式下返回。我删除了新的记录代码,只留下声明来设置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; 
    } 

回答

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

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

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

+0

我已经有了一个插入新行并自动翻转到编辑模式的工作方法。但是我一直在gridview上下文之外调用它。当我尝试在GridView更新过程中执行此操作时,EditIndex或者不起作用,或者被更新过程覆盖。我不确定这是否是一个具有约束力的问题,但我一定会玩这个。我会试着想出一个这个问题的简明例子 – 2010-02-13 01:50:49

+1

重新阅读你的问题后,我可以看到你正在使用一些自动魔术数据绑定和更新。我通常会自己避免这种情况,并在代码隐藏中处理这些任务......正是出于这个原因。当事情不起作用时,很容易看到发生了什么问题。 – Bryan 2010-02-13 22:22:00

0

我有类似的问题,设置所需的索引。这个解决方案为我工作: grdProjectsForSubmiting - 用于显示数据的GridView

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