2013-12-18 29 views
0

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

<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> 
+0

为什么你不使用'Eval()'而不是'Bind()'? –

+0

因为它在GridView的编辑模式下不起作用,例如我无法更改TextBox中的值。 – Milan

+0

你能告诉我你的'Decrypt()'函数在做什么吗? –

回答

1

当我需要做到这一点,我平时就RowDataBound事件设置TextBoxText财产上后面的代码。它是这样的:

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()); 
     } 
    } 
} 

对于这项工作,你GridViewEditIndex属性必须与实际指数正在编辑进行设置。

+0

在你的答案中没有'Decrypt'完成,代码中也有语法错误。 –

+0

谢谢,只是片刻.. – aledpardo

+0

@BhaveshKachhadiya我刚编辑我的答案。 – aledpardo

0

​​和Bind()是完全不同的生物 -​​仅仅是DataBinder.Eval()Bind()速记由ASP.NET解析器解释,并且分为两个部分 - 一个用于数据绑定到控制,另一个用于从控制到移动数据的模型。

这是在这个古老的博客文章描述很好:How ASP.NET databinding deals with Eval and Bind statements

你不提你是什么结合;如果你绑定到一个业务对象,那么你可以为一个未加密的Name创建一个getter/setter属性。或者,您可以提供OnRowUpdating的实现,并在那里执行Decrypt。 (提示:用解密值更新NewValues[]成员)。