Mise à jour avec un formview et un object datasource
Bonjour
Je cherche à mettre à jour une table avec une formview .
Il n'y a pas d'erreur mais l'enregistrement n'est pas mis à jours.
Avec la même logique, l'insertion marche à merveille.
Sur mon webform , j'ai le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
<asp:FormView ID="FormView1" runat="server" DataSourceID="PeriDataSource" OnItemInserted="FormView1_ItemInserted" AllowPaging="True" DataKeyNames="ID_PERIPHERIQUE">
<EditItemTemplate>
ID_PERIPHERIQUE:
<asp:Label ID="ID_PERIPHERIQUELabel1" runat="server" Text='<%# Eval("ID_PERIPHERIQUE") %>'></asp:Label><br />
FOURNISSEUR:
<asp:DropDownList ID="FourniDropList" runat="server" DataSourceID="FourniSource" DataTextField="RaisonSociale" DataValueField="ID_FOURNISSEUR">
</asp:DropDownList><asp:ObjectDataSource ID="FourniSource" runat="server"
SelectMethod="GetAllFournisseur" TypeName="FournisseurBll"></asp:ObjectDataSource>
<br />
Prix Achat:
<br />
<asp:TextBox ID="PrixAchatTextBox" runat="server" Text='<%# Bind("PrixAchat") %>'></asp:TextBox><br />
observation:
<asp:TextBox ID="observationTextBox" runat="server" Text='<%# Bind("observation") %>'></asp:TextBox><br />
Etat:<br />
<asp:RadioButtonList ID="EtatRadioList1" runat="server" DataSourceID="EtatSource" DataTextField="TexteEtat" DataValueField="ValeurEtat">
</asp:RadioButtonList><asp:ObjectDataSource ID="EtatSource" runat="server"
SelectMethod="GetAllEtat" TypeName="EtatBLL"></asp:ObjectDataSource>
Type:
<br />
<asp:DropDownList ID="TypeDropList" runat="server" DataSourceID="TypeSource" DataTextField="TextType" DataValueField="ID_TYPE">
</asp:DropDownList><asp:ObjectDataSource ID="TypeSource" runat="server"
SelectMethod="GetAllTypePeri" TypeName="TypePeriBLL"></asp:ObjectDataSource>
<br />
<br />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
Text="Mettre à jour" ></asp:LinkButton>
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
Text="Annuler"></asp:LinkButton>
</EditItemTemplate>
<InsertItemTemplate>
</InsertItemTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="PeriDataSource" runat="server" DataObjectTypeName="Peripherique"
InsertMethod="insertPeri" SelectMethod="GetPeriById"
TypeName="PeriBLL" OnInserting="PeriDataSource_Inserting" OldValuesParameterFormatString="original_{0}" UpdateMethod="updatePeripherique" OnUpdating="PeriDataSource_Updating" >
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="id" PropertyName="SelectedValue"
Type="Int32" DefaultValue="-1" />
</SelectParameters>
</asp:ObjectDataSource> |
Dans ma classe métier PeriBLL, j'ai le code suivant,Oserver la méthode updatePeripherique(Peripherique unPeri)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
public class PeriBLL
{
PeripheriqueTableAdapter _periAdapter = null;
protected PeripheriqueTableAdapter Adapter
{
get
{
if (_periAdapter == null)
_periAdapter = new PeripheriqueTableAdapter();
return _periAdapter;
}
}
// retourne tous les périphériques
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
public FinTrack.PeripheriqueDataTable GetAllPeri()
{
return Adapter.GetAllPeripheriques();
}
//Retourne les périphériques par leurs Id
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
public FinTrack.PeripheriqueDataTable GetPeriById(int id)
{
if (id < 0) return Adapter.GetAllPeripheriques();
else return Adapter.GetPeriByID(id);
}
//Insérer un Péripherique
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
public object insertPeri(Peripherique unPeri)
{
Object ob= Adapter.InsertPeripherique((long)unPeri.ID_FOURNISSEUR,unPeri.Type,(long)unPeri.Etat,
(float)unPeri.PrixAchat,unPeri.DateArrive ,System.DateTime.Today.ToString(),unPeri.Observation);
return ob;
}
//Mettre un Périphérique à jour
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
public object updatePeripherique(Peripherique unPeri)
{
Object ob = Adapter.UpdatePeripherique((long)unPeri.ID_FOURNISSEUR, (int)unPeri.Type, (float)unPeri.PrixAchat, unPeri.DateArrive, unPeri.Observation, (long)unPeri.Etat, (int)unPeri.IdPeripherique);
return ob;
}
} |
Enfin, dans l'évenement
PeriDataSource_Updating je crée un objet Périphérique et je récupère les champs du formview et j'ajoute cet obet au paramettre du datasource à travers le paramètre e de type ObjectDataSourceMethodEventArgs
j'ai le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
protected void PeriDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
Peripherique unPeri = new Peripherique();
PeriBLL unPeriBll = new PeriBLL();
try
{
unPeri.ID_FOURNISSEUR = int.Parse(((DropDownList)FormView1.FindControl("FourniDropList")).SelectedValue);
unPeri.Type = int.Parse(((DropDownList)FormView1.FindControl("TypeDropList")).SelectedValue);
unPeri.PrixAchat = double.Parse(((TextBox)FormView1.FindControl("TypeDropList")).Text);
unPeri.Observation = ((TextBox)FormView1.FindControl("observationTextBox")).Text;
unPeri.Etat = int.Parse(((RadioButtonList)FormView1.FindControl("EtatRadioList1")).SelectedValue);
unPeri.DateArrive = ((TextBox)FormView1.FindControl("DateArriveTextBox")).Text;
unPeri.IdPeripherique = Convert.ToInt32(FormView1.DataKey.Value);
e.InputParameters.Add("unPeri", unPeri);
}
catch (Exception uneEx)
{
}
} |