【问题标题】:DetailsView not updating and changing only after 2 clicks, Cancel not showing editable values in readonlyDetailsView 仅在单击 2 次后才更新和更改,Cancel 不以只读方式显示可编辑值
【发布时间】:2011-08-14 13:30:50
【问题描述】:

我创建了一个在日历中选择日期后显示的详细信息视图。此详细信息视图通过后面代码中的 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" />

【问题讨论】:

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


    【解决方案1】:

    你的问题在DetailView1_ModeChanging

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

    来自MSDN

    你需要使用Item Command event

    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 事件,因此我将该方法作为要使用的代码放回原处。问题依然存在,我仍然需要单击两次才能进入编辑模式并且编辑不起作用。
    • 我已经尝试过了,当我运行程序时,当我按下编辑按钮时,我的详细信息视图会从屏幕上消失。当我使用 gridview 而不是 detailsview 时,也会出现同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2013-11-29
    • 2017-05-21
    • 2013-05-16
    相关资源
    最近更新 更多