如何在编辑时更改GridView单元格的单元格值?

时间:2018-03-19 22:29:34

标签: c# asp.net gridview boundfield

我有一个带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;
        }
    }
}

看起来我必须能够访问显示的编辑控件,但是如何?

1 个答案:

答案 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