フッター行に挿入テンプレートを作成したグリッドビューがあります。
ビジネス オブジェクトにバインドされた ObjectDataSource があります。
発生しない OnInserting イベント ハンドラーがあります。
ObjectDataSource で .Insert を呼び出すと、プログラムでエラーが発生します。私が受け取ったエラーは、値がなく、値の辞書が空でないことを確認する必要があるというものです。
辞書をパラメーターとして挿入する方法がわかりません。ObjectDataSourceView を取得してその Insert メソッドを使用するという言及を見てきましたが、それを行う方法についての言及は見られず、MSDN はあなたがアクセスできないと主張しています。
リフレクションはここに行く方法ですか?グリッドビューに行を挿入するより良い方法はありますか? ここで私の手順に明らかな何かが欠けていますか?
以下はコードです:
ObjectDataSource:
<asp:ObjectDataSource ID="LeasesDS" runat="server" OnInserting="LeasesDS_Inserting"
DataObjectTypeName="CLS.BusObjects.LeaseObj" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetLeasesByCustomerID" TypeName="CLS.BusObjects.LeaseObj"
UpdateMethod="Update">
<SelectParameters>
<asp:Parameter Name="customerID" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="CustomerID" Type="Int32" />
<asp:Parameter Name="PurchaseDate" Type="DateTime" />
<asp:Parameter Name="AutoYear" Type="Int32" />
<asp:Parameter Name="Make" Type="String" />
<asp:Parameter Name="Model" Type="String" />
<asp:Parameter Name="LeaseEndDate" Type="DateTime" />
</InsertParameters>
</asp:ObjectDataSource>
CodeBehind メソッド:
protected void LeasesGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert" && Page.IsValid)
{
LeasesDS.Insert();
}
}
protected void LeasesDS_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
DropDownList GridCustomersList = (DropDownList)LeasesGrid.FooterRow.FindControl("GridCustomersList");
TextBox PurchaseDate = (TextBox)LeasesGrid.FooterRow.FindControl("PurchaseDate");
TextBox AutoYear = (TextBox)LeasesGrid.FooterRow.FindControl("AutoYear");
TextBox Make = (TextBox)LeasesGrid.FooterRow.FindControl("Make");
TextBox Model = (TextBox)LeasesGrid.FooterRow.FindControl("Model");
TextBox LeaseEndDate = (TextBox)LeasesGrid.FooterRow.FindControl("LeaseEndDate");
e.InputParameters["CustomerID"] = Convert.ToInt32(GridCustomersList.SelectedValue);
DateTime? purchaseDate = null;
if (!string.IsNullOrEmpty(PurchaseDate.Text)) purchaseDate = Convert.ToDateTime(PurchaseDate.Text);
e.InputParameters["PurchaseDate"] = purchaseDate;
int? autoYear = null;
if (!string.IsNullOrEmpty(AutoYear.Text)) autoYear = Convert.ToInt32(AutoYear.Text);
e.InputParameters["AutoYear"] = autoYear;
string make = null;
if (!string.IsNullOrEmpty(Make.Text)) make = Make.Text;
e.InputParameters["Make"] = make;
string model = null;
if (!string.IsNullOrEmpty(Model.Text)) model = Model.Text;
e.InputParameters["Model"] = model;
DateTime? leaseEndDate = null;
if (!string.IsNullOrEmpty(LeaseEndDate.Text)) leaseEndDate = Convert.ToDateTime(LeaseEndDate.Text);
e.InputParameters["LeaseEndDate"] = leaseEndDate;
}