我有一个带BoundField
的GridView:
<asp:BoundField HeaderText="Secret" DataField="encrypted" DataFormatString="***"/>
我想仅在用户编辑行时解密此字段。这样做的合理位置似乎在RowDataBound()
。我尝试使用e.Rows.Cells
,但编辑时为空(否则为'***'
)。
我可以使用DataRowView
获取基础值,但我无法弄清楚如何在编辑时在TextBox中获取解密数据。
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState.HasFlag(DataControlRowState.Edit))
{
// When in Normal state, e.Row.Cells[0].Text is '***'
// When in Edit state, e.Row.Cells[0].Text is empty.
string cellValue = e.Row.Cells[0].Text; // Always empty
// Get the encrypted field
DataRowView rowView = (DataRowView)e.Row.DataItem;
string decrypted = Decrypt(rowView["encrypted"].ToString());
// This doesn't work - how to get this value in the edit box?
e.Row.Cells[0].Text = decrypted;
}
}
}
看起来我必须能够访问显示的编辑控件,但是如何?
答案 0 :(得分:0)
使用BoundField,没有一个记录良好的方法来查找编辑控件。您可能会在Cell中作为第一个控件找到它,但为了将来证明您的解决方案,我建议使用模板字段:
<asp:TemplateField HeaderText = "Secret">
<ItemTemplate>
*****
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtSecret" runat="server"
Text='<%# Decrypt(Eval("encrypted").ToString()) %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
您的Decrypt方法必须在课程中公开。甚至不需要OnRowDataBound