1

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

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

我最初认为这种行为只是现状,因为它发生在我添加 DataBind 调用之前,但是我偶然注意到如果更新按钮在行中的第一个,而取消按钮在最后,按 ENTER 的行为就像我想要 - 它将更改保存到当前行并退出编辑模式。但这仅在我的 DataBind 调用未到位时才是正确的。

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

关于如何使这个东西表现的任何想法?

蒂亚,毫米

4

1 回答 1

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

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

于 2012-08-30T00:36:26.010 回答