在ASP.Net ListView中编辑时按下ENTER时的反直觉行为?

时间:2012-08-29 17:23:01

标签: asp.net listview webforms

我在同一个.ASPX页面上有一个ListView和一个DetailsView组件。 DetailsView显示ListView中显示的行的总计。为了使它保持最新,我在ListView ItemUpdated,ItemInserted和ItemDeleted事件处理程序中调用DetailsView.DataBind()。

在编辑或插入时在字段中按下ENTER时,撤消对当前行的更改,并将第一个可见行置于编辑模式。如果我单击“更新”按钮而不是按ENTER键,它将按预期工作。

我最初认为这种行为只是现状,因为它发生在我添加DataBind调用之前,但我偶然注意到如果Update按钮是行中的第一个,并且取消按钮是最后一个,则按ENTER键表现得像我想要的那样 - 它将更改保存到当前行并退出编辑模式。但是,如果我的DataBind调用没有到位,那只会是真的。

我想我可以为DetailsView添加一个刷新按钮,但是我真的无法决定哪个更丑,那个或者不记得不按ENTER键。

关于如何制作这件事的任何想法都表现出来了?

TIA, MM

1 个答案:

答案 0 :(得分:1)

问题是按ENTER键“点击”表单上出现的第一个按钮。所以我在其他控件上方创建了一个带有透明图像的按钮,以及下面的单击处理程序:

protected void TransparentUpdateButton_Click(object sender, ImageClickEventArgs e)
{
    if (ListView1.EditItem != null)
    {
        ListView1.UpdateItem(ListView1.EditIndex, false);
        return;  // must return, InsertItem is always non-null
    }
    if (ListView1.InsertItem != null) // probably an unnecessary test
        ListView1.InsertNewItem(false);
}

也许不是宇宙中最优雅的解决方案,但似乎有效,并且肯定会在默认情况下击败它的行为。也许如果我没有使用过ImageButtons,那么就没有必要,但是函数的保存,编辑,删除,撤消和插入都很容易用16x16图像来表示,文本等效是浪费水平空间。

无论如何,我会接受它。 :-)