【问题标题】:When GRidView's row is in edit mode, textboxes don't display current values当 GRidView 行处于编辑模式时,文本框不显示当前值
【发布时间】:2009-12-03 18:44:23
【问题描述】:


1) 我注意到如果我们不将 GridView 绑定到对象数据源控件,那么当用户将 GridView 置于编辑模式时,我们必须处理 GridView.RowEditing 事件(否则我们会得到一个异常)并在此事件中放置GridView 的行进入编辑模式。 GridView 不会自动将一行置于编辑模式是否有原因?


2) 当我们手动将 GridView 绑定到 DataSet 的一个表并且用户将一行置于编辑模式时,行的列将用文本框替换字段。但由于某种原因,这些文本框不显示当前字段值,而是根本不显示任何文本。我做错了什么?


3) 我还处理了 gridView.RowUpdated 事件,所以我可以将行放回非编辑模式,但没有效果。我什至尝试按下其他行的编辑按钮,但行仍然不会退出编辑模式。任何想法我做错了什么?

protected void gvwEmployees_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    e.KeepInEditMode = false; 
}


感谢

【问题讨论】:

    标签: asp.net data-binding gridview


    【解决方案1】:

    当不使用DataSource 控件和GridView 或其他隐藏手动数据绑定复杂性的数据绑定控件时,您必须手动处理RowEditingRowUpdatingRowDeleting 等。借助内置的数据模型和自动绑定,GridView 会为您处理这些事件。

    您尚未发布您的 RowEditing 代码,但我怀疑您没有将 GridViews EditIndex 设置为 NewEditIndex 并且没有重新绑定,这可能是您看不到当前数据的原因。

    protected void gvwEmployees_RowEditing(object sender, GridViewEditEventArgs e)
    {
       GridView.EditIndex = e.NewEditINdex;
       BindData();
    }
    

    RowUpdating 事件也是如此。您必须手动更新您的数据,然后将EditIndex 设置为-1,这将使您的GridView 回到ReadOnly 模式。请记住,手动绑定时不会填充GridViewUpdateEventArgse.OldValuese.NewValues 和e.Keys 属性。这意味着您必须使用 e.RowIndex 自己处理更新,这是已编辑行的索引。

    protected void gvwEmployees_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridView.EditIndex = -1;
        BindData();
    }
    

    【讨论】:

    • A) 为什么当 GridView 将模式更改回只读时必须重新绑定?我想如果 GridView 启用了 ViewState,那么它将能够从 ViewState 恢复字段值(用于只读模式)?! B) 同样,为什么当我们将 GridView 置于编辑模式时,它必须重新绑定到数据源?它不能从只读模式获取值并将它们应用于编辑模式的字段吗? “您的 RowUpdating 事件也是如此。您必须手动更新数据,然后将 EditIndex 设置为 -1,这将使您的 GridView 回到只读模式。”我试过了,但没有任何反应
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多