代码之家  ›  专栏  ›  技术社区  ›  esac

为什么在第一次单击时不显示GridView EditItemTemplate?

  •  1
  • esac  · 技术社区  · 15 年前

    我有一个带有EditItemTemplate的GridView,我正在将字典绑定到它

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

    当我单击“编辑”按钮时,将激发行编辑事件(用调试器验证),在该事件中我设置了GridView编辑索引:

    protected void VariableList_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView grid = sender as GridView;
    
        if (grid == null)
        {
            return;
        }
    
        grid.EditIndex = e.NewEditIndex;
    }
    

    如果我在grid.editIndex=e.neweditIndex;行上设置了一个断点,那么它将把值设置为0,这是第一个正确的项。

    但是,ASP:TextBox没有显示。它显示的是itemtemplate中的内容,而不是editemtemplate中的内容。

    但是,如果我再次单击编辑按钮,它将显示文本框。

    有什么主意如何通过第一次点击得到它吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   John K    15 年前
    grid.EditIndex = e.NewEditIndex;
    grid.DataBind();