ObjectDataSource Gridview Insert schlägt mit leerem Wörterbuch fehl

Ich habe eine Rasteransicht, für die ich eine Einfügevorlage in der Fußzeile erstellt habe.

Ich habe eine ObjectDataSource, die an ein Geschäftsobjekt gebunden ist.

Ich habe eine OnInserting-Ereignisbehandlungsroutine, die niemals ausgelöst wird.

Das Programm stellt einen Fehler fest, wenn ich .Insert für die ObjectDataSource aufrufe. Der Fehler, den ich erhalte, besteht darin, dass keine Werte vorhanden sind und ich überprüfen sollte, ob das Wertewörterbuch nicht leer ist.

Ich sehe keine Möglichkeit, ein Wörterbuch als Parameter einzufügen. Ich habe schon erwähnt, dass die ObjectDataSourceView abgerufen und ihre Insert-Methode verwendet wurde, aber es wird nicht erwähnt, wie das geht, und MSDN behauptet, Sie hätten keinen Zugriff.

Ist Reflexion der Weg hierher? Gibt es eine bessere Möglichkeit, eine Einfügezeile in einer Rasteransicht zu haben? Vermisse ich hier etwas Offensichtliches in meinen Schritten?

Below ist der Code:
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 Methoden:

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;
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage