c# - DetailsView 仅在单击 2 次后不更新和更改,Cancel 不以只读方式显示可编辑值

标签 c# asp.net .net data-binding detailsview

我创建了一个在日历中选择日期后显示的详细信息 View 。此详细信息 View 是通过代码隐藏中的选择语句填充的。这是我遇到的问题列表:

  1. 我必须在编辑按钮上单击两次才能在编辑模式下获取详细信息 View 。
  2. 进入编辑模式后,我会看到更新和取消按钮,但我还必须点击两次取消才能返回只读状态。
  3. 当我处于编辑模式时,我有 3 行可以编辑,当我在只读模式下按取消两次时,这 3 行的值不再显示,它们只是空字段,尽管数据仍然存在在数据库中。
  4. 当我在“编辑”模式下更改某些内容并按“更新”时,我的详细信息 View 就消失了。

代码隐藏:

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" />

最佳答案

你的问题在 DetailView1_ModeChanging

The ModeChanging event is raised when a DetailsView control attempts to change between edit, insert, and read-only mode, but before the CurrentMode property is updated. This allows you to provide an event handler that performs a custom routine, such as canceling the mode change, whenever this event occurs.

来自 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
        }
    }

关于c# - DetailsView 仅在单击 2 次后不更新和更改,Cancel 不以只读方式显示可编辑值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816518/

相关文章:

c# - .NET 6 工作线程服务停止时出现错误

c# - 序列化时出现 JSON .Net Windows Mobile 错误

c# - 为什么使用 Identity Server 和 asp.net core 2 在基于 token 的身份验证上使用 cookie

asp.net - Entity Framework 按枚举值字母顺序排序

asp.net - 存储库是单例的还是静态的还是都不是?

c# - IIS 对 VirtualPrinter 的权限

c# - 如何处理 ASP.NET MVC 3 中的复杂查询?

c# - 在c#应用程序中删除压缩文件

c# - 如何使用 myString.PadLeft?

javascript - 如何在office 365 .js 文件中调用服务器端方法