DetailsView不更新,只有在点击两次后才会更改,取消在只读模式下不显示可编辑的值。

4
我创建了一个详细视图,在选定日期后显示。这个详细视图通过后台代码中的select语句填充。以下是我遇到的问题列表:
  1. 我必须两次点击编辑按钮才能将详细视图设置为编辑模式。
  2. 一旦进入编辑模式,我可以看到更新和取消按钮,但我还必须再次点击取消按钮才能返回只读状态。
  3. 当我处于编辑模式时,有3行可以进行编辑,当我在只读模式下两次按取消时,这3行的值不再显示,它们只是空字段,尽管数据仍然存在于数据库中。
  4. 当我在编辑模式下更改某些内容并按更新时,我的详细视图就会消失。

后台代码:

protected void DetailView1_ModeChanging(Object sender, DetailsViewModeEventArgs e)
{
    if (e.NewMode == DetailsViewMode.Edit)
    {
        DetailsView1.ChangeMode(e.NewMode);
    }
    if (e.CancelingEdit)
    {
        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);   
    }
}

protected void DetailView1_ItemUpdating(Object sender, DetailsViewUpdateEventArgs e)
{
    DetailsView1.DataBind();
}

protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
    DetailsView1.DataBind();
}

标记语言:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
    OnModeChanging="DetailView1_ModeChanging" OnItemUpdating="DetailView1_ItemUpdating"
    OnItemUpdated="DetailsView1_ItemUpdated"
    AllowPaging="True" PageSize="5" HeaderText="Agenda"  CellPadding="10" 
    ForeColor="#333333" />
1个回答

1

你的问题在于 DetailView1_ModeChanging

当 DetailsView 控件尝试在编辑、插入和只读模式之间切换但在 CurrentMode 属性更新之前,将引发 ModeChanging 事件。这允许您提供一个事件处理程序,执行自定义例程,例如在每次发生此事件时取消模式更改。

来自 MSDN

你需要使用 Item Command 事件

protected void DetailsView1_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Edit")
    {
        DetailsView1.ChangeMode(DetailsViewMode.Edit);
    }
}

编辑:

 protected void DetailView1_ModeChanging(Object sender, DetailsViewModeEventArgs e)
    {
        if (e.NewMode == DetailsViewMode.Edit)
        {
            DetailsView1.ChangeMode(e.NewMode);
            DetailsView1.Datebind(); // add this and check
        }
        if (e.CancelingEdit)
        {
            DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);   
            DetailsView1.Datebind(); // add this and check
        }
    }

你好,感谢您的回复。我在我的详细视图中添加了 OnItemCommand="DetailsView1_ItemCommand 并使用了您上面写下的代码。起初,我把所有的代码都放在文本中,然后我收到了消息,它正在触发未处理的 ModeChanging 事件,所以我把那个方法作为代码重新使用了一遍。问题仍然存在,我仍然需要点击两次才能进入编辑模式,而且编辑也无法正常工作。 - Dieter
我已经尝试过这个,并且当我按下“编辑”按钮时,我的详细信息视图从屏幕上消失。当我使用网格视图而不是详细信息视图时,同样的问题也会发生。 - Dieter

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