GridView行编辑 - 更改值

时间:2013-12-18 14:55:56

标签: c# asp.net gridview

我需要在GridView中编辑期间更改值。我正在使用代码隐藏中的方法Decrypt(object)。它适用于Eval(),但不适用Bind()

<asp:GridView ID="GridView1" runat="server" 
          DataKeyNames="ID" DataSourceID="entityDataSource1" >
  <Columns>
     <asp:TemplateField>
        <ItemTemplate>
            <asp:Label ID="lblTab1" runat="server" 
                             Text='<%# Decrypt(Eval("Name")) %>' />
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="lblTab1" runat="server" 
                             Text='<%# Decrypt(Bind("Name")) %>' />
         </EditItemTemplate>
     </asp:TemplateField>
  </Columns>
</asp:GridView>

2 个答案:

答案 0 :(得分:1)

当我需要这样做时,我通常会在TextBox事件后面的代码上设置Text RowDataBound属性。就像这样:

protected void GridView1_RowDataBound( Object sender, System.Web.UI.WebControls.GridViewRowEventArgs e ) {
    if( e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit ) {
        TextBox txt = ( TextBox )e.Row.FindControl( "lblTab1" );
        if( txt != null ) {
            DataRowView drv = ( DataRowView )e.Row.DataItem;
            txt.Text = Decrypt( drv["Name"].ToString() );
        }
    }
}

对于这项工作,您的GridView EditIndex属性必须设置为您正在编辑的实际索引。

答案 1 :(得分:0)

Eval()Bind()是截然不同的生物 - Eval()只是DataBinder.Eval()的简写,Bind()ASP.NET解析器解释,分为两部分 - 一部分用于将数据绑定到控件,另一部分用于将数据从控件移动到模型。

在这篇老博文中很好地描述了这一点:How ASP.NET databinding deals with Eval and Bind statements

你没有提到你的约束力;如果绑定到业务对象,则可以为未加密的Name创建getter / setter属性。或者,您可以提供OnRowUpdating的实施,并在那里执行Decrypt。 (提示:使用解密的值更新NewValues[]成员。)