Как изменить значение ячейки ячейки GridView при редактировании?

У меня есть GridView с BoundField:

<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 ответ

При использовании BoundField не существует хорошо документированного способа найти элемент управления для редактирования. Вы, вероятно, могли бы найти его в качестве первого элемента управления в ячейке, но для будущего решения вашего вопроса я предлагаю использовать поле шаблона:

<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

Другие вопросы по тегам