![](/img/trans.png)
[英]Getting GridView DataKeyNames values when Row_Editing event fires?
[英]GridView Row editing - change values
我需要在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>
当需要执行此操作时,通常会在RowDataBound
事件后面的代码上设置TextBox
Text
属性。 就像这样:
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
属性。
Eval()
和Bind()
是完全不同的生物Eval()
只是DataBinder.Eval()
简写,但Bind()
由ASP.NET
解析器解释,并分为两部分-一部分用于将数据绑定到控件和另一个用于将数据从控件移动到模型。
这篇旧的博客文章对此进行了很好的描述: ASP.NET数据绑定如何处理Eval和Bind语句
您没有提及要绑定的内容; 如果要绑定到业务对象,则可以为未加密的名称创建getter / setter属性。 或者,您可以提供OnRowUpdating
的实现,并在那里执行Decrypt
。 (提示:用解密后的值更新NewValues[]
成员)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.