J'ai une vue quadrillée dans laquelle j'ai créé un modèle d'insertion dans la ligne de pied de page.L'insertion Gridview d'ObjectDataSource échoue au dictionnaire Valeurs vides/vides
J'ai une ObjectDataSource qui est liée à un objet métier.
J'ai un gestionnaire d'événement OnInserting qui n'est jamais déclenché.
Le programme rencontre une erreur une fois que j'appelle .Insert sur ObjectDataSource. L'erreur que je reçois est qu'il n'y a pas de valeurs et que je devrais vérifier pour s'assurer que le dictionnaire de valeurs n'est pas vide.
Je ne vois pas comment insérer un dictionnaire en tant que paramètre. J'ai vu mentionner de saisir le ObjectDataSourceView et en utilisant sa méthode Insert mais je ne vois aucune mention de la façon de faire cela et MSDN prétend que vous n'avez pas accès.
La réflexion est-elle le chemin à parcourir? Y a-t-il une meilleure façon d'avoir une ligne d'insertion sur un gridview? Est-ce que je manque quelque chose d'évident dans mes pas ici?
Voici le 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 Méthodes:
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;
}