次のようなフォームビューを含む GridView があります。
<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 エラーが発生します。どんな提案でも大歓迎です。