Почему GridView EditItemTemplate не отображается при первом нажатии? - PullRequest
1 голос
/ 06 января 2010

У меня есть GridView с EditItemTemplate, к которому я привязываю словарь

<asp:GridView runat="server" ID="VariableList" ShowHeader="false" AutoGenerateColumns="false" OnRowEditing="VariableList_RowEditing">
    <Columns>                        
        <asp:BoundField ReadOnly="true" DataField="Key" />
        <asp:TemplateField ItemStyle-Width="300">
            <ItemTemplate>
                <asp:Label runat="server" id="VName" Text='<%# Eval("Value") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" id="VValue" Text='<%# Eval("Value") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="true" />
    </Columns>
</asp:GridView>

Когда я нажимаю кнопку «Редактировать», запускается событие RowEditing (проверяется отладчиком), в котором я устанавливаю GridViews EditIndex:

protected void VariableList_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView grid = sender as GridView;

    if (grid == null)
    {
        return;
    }

    grid.EditIndex = e.NewEditIndex;
}

Если я установлю точку останова на сетке .EditIndex = e.NewEditIndex; в строке устанавливается значение 0, что является первым правильным пунктом.

Однако asp: TextBox не отображается. Он показывает, что находится в ItemTemplate, а не в EditItemTemplate.

Однако, если я снова нажму на кнопку «Редактировать», появится текстовое поле.

Есть идеи, как получить его с первого клика?

1 Ответ

3 голосов
/ 06 января 2010
grid.EditIndex = e.NewEditIndex;
grid.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...