我有一个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错误。 任何建议都表示赞赏。
答案 0 :(得分:1)
我相信EmptyDataTemplate
仅在您绑定到数据源并且源中没有记录时显示。因此,如果您有任何记录,您的EmptyDataTemplate
将永远不会显示。而且我不相信带有命令按钮的列也会在数据源为空时显示,因此您尝试做的事情不能以这种方式完成。
有些人通过使用网格页脚作为添加新行的位置来提供添加记录功能。这是一个Stack Overflow问题和答案(有一个例子),说明如何:
答案 1 :(得分:0)
EmptyDataTemplate
。它用于显示诸如“找不到记录”之类的消息。如果要对控件进行数据绑定,请使用Templatefield
&amp;使用RowDataBoundEvent上的FindControl
获取控件。