我有一个GridView控件连接到一个数据源,我允许行编辑。我使用指向更新,取消和编辑GridView命令的标准编辑/保存/删除按钮。
我想添加一个额外的按钮,“下一步”与保存/取消按钮内联。这将与保存按钮的功能相同,但也会向网格添加一行,并将该行置于编辑模式。为此,我将代码添加到GridView的Updated
事件中,该事件向db添加新记录,重新绑定网格并设置editindex。这似乎有效,但网格实际上并没有在编辑模式下返回。我删除了新的记录代码,只是将语句留下来设置editindex,但网格仍然不会保持编辑模式。
在这种情况下,是否可以强制网格保持编辑模式?似乎除非您设置GridViewUpdatedEventArgs
的取消属性,否则网格将转换为查看模式。我不想在这种情况下设置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;
}
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
我们可能需要查看一些代码...但是,我可以从您的描述中猜出问题所在。您可能需要将EditIndex previous 设置为重新绑定。如果这不起作用(超出范围异常?),那么你必须调用DataBind()来获取你的新行,设置EditIndex,再次调用DataBind()。
不幸的是,只是设置EditIndex并没有真正完成工作。您必须设置索引并调用DataBind()。
答案 2 :(得分:0)
我在设置所需索引方面遇到了类似的问题。这个解决方案对我有用: grdProjectsForSubmiting - 用于显示数据的GridView
grdProjectsForSubmiting.EditIndex = neededIndex; //不要忘记,行从0开始枚举,而不是从1 !!
grdProjectsForSubmiting.DataSource = ProjectsController.SessionTodayEntries;
grdProjectsForSubmiting.DataBind();