我有一個GridView包含FormView控件,如:如何GridView中EmptyDataTemplate內發現的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錯誤。 任何建議表示讚賞。
任何類型的模板字段都必須放在標籤中。然後在行數據綁定中檢查rowtype。如果它的空然後使用e.row.FindControl方法找到formview。通常,當數據源不包含行並將結果綁定到0行時,將使用此模板。然後顯示空白數據模板。 –
2013-03-24 09:18:57