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



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

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

我最初认为这种行为只是现状,因为它发生在我添加DataBind调用之前,但我意外地注意到,如果"更新"按钮在行中的第一个,而"取消"按钮在最后一个,按ENTER键的行为就像我想要的那样——它将更改保存到当前行并退出编辑模式。但只有当我的DataBind调用没有到位时,这才是真的。

我想我可以为DetailsView添加一个刷新按钮,但我真的无法决定哪个更丑,或者必须记住不要按ENTER。

关于如何让这个东西正常运转,有什么想法吗?

TIA,MM

问题是按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图像表示,文本等价物浪费了水平空间。

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

最新更新