如何在GridView EmptyDataTemplate中找到FormView

时间:2013-03-24 08:34:30

标签: asp.net gridview

我有一个GridView包含Formview,如:

<asp:GridView ID="gv1" runat="server" AutoGenerateColumns="false"
     OnRowCommand="gv1_RowCommand" DataKeyNames="employeeID"
     DataSourceID="ds">
   <EmptyDataTemplate>
       <asp:FormView ID="fv1" runat="server" DataKeyNames="employeeID" 
                     DataSourceID="ds" DefaultMode="Insert">
           <InsertItemTemplate>
               // insert mode table
           </InsertItemTemplate>
           <EditItemTemplate>
              //  edit mode table
           </EditItemTemplate>
      </asp:FormView>
   </EmptyDataTemplate>

   <Columns>
       <asp:TemplateField>
       <HeaderTemplate>
           <asp:Button ID="btnNew" runat="server" Text="New Record" CommandName="New" />
       </HeaderTemplate>
           <ItemTemplate>
           <asp:Button ID="btnEdit" runat="server" Text="Edit" CommandName="Edit" />
       </ItemTemplate>
       </asp:TemplateField>
   </Columns>
</asp:GridView>

我想要的是当单击按钮时,页面显示EmptyDataTemplate,所以在代码隐藏中我尝试:

protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e) {
    switch(e.CommandName){
        case "New":
            gv1.DataSourceID = null;
            break;
        case "Edit":
            var row = ((Control)e.CommandSource).NamingContainer as GridViewRow;
            if (row != null) {
                var fv = row.FindControl("fv1") as FormView;
                fv.ChangeMode(FormViewMode.Edit);
            }
            gv1.DataSourceID = null;
            break;
    }
}

但是我坚持使用FormView,它发生NullReferenceException错误。 任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

我相信EmptyDataTemplate仅在您绑定到数据源并且源中没有记录时显示。因此,如果您有任何记录,您的EmptyDataTemplate将永远不会显示。而且我不相信带有命令按钮的列也会在数据源为空时显示,因此您尝试做的事情不能以这种方式完成。

有些人通过使用网格页脚作为添加新行的位置来提供添加记录功能。这是一个Stack Overflow问题和答案(有一个例子),说明如何:

ASP.net GridView not Inserting from Footer Template

答案 1 :(得分:0)

当数据源返回零记录时,使用

EmptyDataTemplate。它用于显示诸如“找不到记录”之类的消息。如果要对控件进行数据绑定,请使用Templatefield&amp;使用RowDataBoundEvent上的FindControl获取控件。