Exporter (0) Imprimer
Développer tout
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

ObjectDataSource.UpdateMethod, propriété

Remarque : cette propriété est nouvelle dans le .NET Framework version 2.0.

Obtient ou définit le nom de la méthode ou de la fonction que le contrôle ObjectDataSource appelle pour mettre à jour des données.

Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)

public string UpdateMethod { get; set; }
/** @property */
public String get_UpdateMethod ()

/** @property */
public void set_UpdateMethod (String value)

public function get UpdateMethod () : String

public function set UpdateMethod (value : String)

Valeur de la propriété

Chaîne qui représente le nom de la méthode ou de la fonction que ObjectDataSource utilise pour mettre à jour des données. La valeur par défaut est une chaîne vide.

Le contrôle ObjectDataSource suppose que la méthode qui est identifiée par la propriété UpdateMethod exécute des mises à jour individuellement plutôt que par lots.

La propriété UpdateMethod délègue à la propriété UpdateMethod de l'objet ObjectDataSourceView associé au contrôle ObjectDataSource.

Durée de vie des objets

La méthode identifiée par la propriété UpdateMethod peut être une méthode d'instance ou une méthode (static (Shared en Visual Basic). S'il s'agit d'une méthode d'instance, l'objet métier est créé et détruit chaque fois que la méthode spécifiée par la propriété UpdateMethod est appelée. Vous pouvez gérer les événements ObjectCreated et ObjectCreating pour utiliser l'objet métier avant que la méthode spécifiée par la propriété UpdateMethod ne soit appelée. Vous pouvez également gérer l'événement ObjectDisposing qui est déclenché après l'appel de la méthode spécifiée par la propriété UpdateMethod. Si l'objet métier implémente l'interface IDisposable, la méthode Dispose est appelée avant la destruction de l'objet. Si la méthode est une méthode static (Shared en Visual Basic), l'objet métier n'est jamais créé et vous ne pouvez pas gérer les événements ObjectCreated, ObjectCreating et ObjectDisposing.

Fusion des paramètres

Les paramètres sont ajoutés à la collection DeleteParameters depuis trois sources :

  • Depuis le contrôle lié aux données, au moment de l'exécution.

  • Depuis l'élément UpdateParameters, de manière déclarative.

  • Depuis le gestionnaire d'événements Updating, par programme.

D'abord, tous les paramètres générés depuis des contrôles liés aux données sont ajoutés à la collection UpdateParameters. Par exemple, si le contrôle ObjectDataSource est lié à un contrôle GridView qui comporte les colonnes Name et Number, les paramètres pour Name et Number sont ajoutés à la collection. Le nom exact du paramètre dépend de la propriété OldValuesParameterFormatString. Le type de données de ces paramètres est string. Ensuite, les paramètres qui sont répertoriés dans l'élément UpdateParameters sont ajoutés. Si un paramètre dans l'élément UpdateParameters possède le même nom qu'un paramètre déjà présent dans la collection UpdateParameters, le paramètre existant est modifié pour correspondre au paramètre spécifié dans l'élément UpdateParameters. En général, cela permet de modifier le type des données dans le paramètre. Enfin, vous pouvez ajouter et supprimer des paramètres par programme dans l'événement Updating qui se produit avant l'exécution de la méthode Update. La méthode est résolue après la fusion des paramètres. La résolution de méthode est abordée dans la section suivante.

Résolution de méthode

Lorsque la méthode Update est appelée, les champs de données du contrôle lié aux données, les paramètres créés de manière déclarative dans l'élément UpdateParameters et les paramètres ajoutés dans le gestionnaire d'événements Updating sont tous fusionnés. (Pour plus d'informations, consultez la section précédente.) Le contrôle ObjectDataSource essaie ensuite de rechercher une méthode à appeler. D'abord, il recherche une ou plusieurs méthodes avec le nom spécifié dans la propriété UpdateMethod. Si aucune correspondance n'est trouvée, une exception InvalidOperationException est levée. Si une correspondance est trouvée, il recherche ensuite des noms de paramètres correspondants. Supposez, par exemple, qu'un type spécifié par la propriété TypeName possède deux méthodes nommées UpdateARecord. L'une UpdateARecord comporte un paramètre, ID et l'autre UpdateARecord comporte deux paramètres, Name et Number. Si la collection UpdateParameters comporte un seul paramètre nommé ID, la méthode UpdateARecord comportant uniquement le paramètre ID est appelée. Le type du paramètre n'est pas vérifié lors de la résolution des méthodes. L'ordre des paramètres est sans importance.

Si la propriété DataObjectTypeName est définie, la méthode est résolue différemment. ObjectDataSource recherche une méthode avec le nom spécifié dans la propriété UpdateMethod qui prend un paramètre du type spécifié dans la propriété DataObjectTypeName. Dans ce cas, le nom du paramètre est sans importance.

Cette section comprend deux exemples de code. Le premier exemple de code illustre comment utiliser un contrôle DropDownList, des contrôles TextBox et plusieurs objets ObjectDataSource pour mettre à jour des données. Le deuxième exemple de code affiche la classe EmployeeLogic qui est utilisée dans le premier exemple de code.

L'exemple de code suivant illustre comment utiliser un contrôle DropDownList, des contrôles TextBox et plusieurs contrôles ObjectDataSource pour mettre à jour des données. DropDownList affiche le nom d'un employé Northwind alors que les contrôles TextBox sont utilisés pour entrer et mettre à jour des informations relatives aux adresses. Étant donné que la collection UpdateParameters contient un objet ControlParameter qui est lié à la valeur sélectionnée de DropDownList, le bouton qui déclenche l'opération Update est activé uniquement après sélection d'un employé.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<%@ Import namespace="Samples.AspNet.CS" %>
<Script runat="server">

// Add parameters and initialize the user interface
// only if an employee is selected.
private void Page_Load(object sender, EventArgs e)
{
  // Be sure the text boxes are initialized with
  // data from the currently selected employee.
  NorthwindEmployee selectedEmployee = EmployeeLogic.GetEmployee(DropDownList1.SelectedValue);
  if (selectedEmployee != null) {
    AddressBox.Text    = selectedEmployee.Address;
    CityBox.Text       = selectedEmployee.City;
    PostalCodeBox.Text = selectedEmployee.PostalCode;

    Button1.Enabled = true;
  }
  else {
    Button1.Enabled = false;
  }
}

// Press the button to update.
private void Btn_UpdateEmployee (object sender, CommandEventArgs e) {
  ObjectDataSource2.Update();
}
</Script>
<html>
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <!-- The DropDownList is bound to the first ObjectDataSource. -->
        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.CS.EmployeeLogic" />

        <p><asp:dropdownlist
          id="DropDownList1"
          runat="server"
          datasourceid="ObjectDataSource1"
          datatextfield="FullName"
          datavaluefield="EmpID"
          autopostback="True" /></p>

        <!-- The second ObjectDataSource performs the Update. This
             preserves the state of the DropDownList, which otherwise
             would rebind when the DataSourceChanged event is
             raised as a result of an Update operation. -->

        <!-- Security Note: The ObjectDataSource uses a FormParameter,
             Security Note: which does not perform validation of input from the client.
             Security Note: To validate the value of the FormParameter,
             Security Note: handle the Updating event. -->

        <asp:objectdatasource
          id="ObjectDataSource2"
          runat="server"
          updatemethod="UpdateEmployeeWrapper"
          typename="Samples.AspNet.CS.EmployeeLogic">
          <updateparameters>
            <asp:controlparameter name="anID" controlid="DropDownList1" propertyname="SelectedValue" />
            <asp:formparameter name="anAddress" formfield="AddressBox" />
            <asp:formparameter name="aCity" formfield="CityBox" />
            <asp:formparameter name="aPostalCode" formfield="PostalCodeBox" />
          </updateparameters>
        </asp:objectdatasource>

        <p><asp:textbox
          id="AddressBox"
          runat="server" /></p>

        <p><asp:textbox
          id="CityBox"
          runat="server" /></p>

        <p><asp:textbox
          id="PostalCodeBox"
          runat="server" /></p>

        <asp:button
          id="Button1"
          runat="server"
          text="Update Employee"
          oncommand="Btn_UpdateEmployee" />

    </form>
  </body>
</html>

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>
<%@ Import namespace="Samples.AspNet.JSL" %>
<Script runat="server">

// Add parameters and initialize the user interface
// only if an employee is selected.
    private void Page_Load(Object sender, EventArgs e) throws NorthwindDataException
    {
        // Be sure the text boxes are initialized with
        // data from the currently selected employee.
        NorthwindEmployee selectedEmployee =
            EmployeeLogic.GetEmployee(DropDownList1.get_SelectedValue());
        if (selectedEmployee != null) {
            AddressBox.set_Text(selectedEmployee.get_Address());
            CityBox.set_Text(selectedEmployee.get_City());
            PostalCodeBox.set_Text(selectedEmployee.get_PostalCode());
            Button1.set_Enabled(true);
        }
        else {
            Button1.set_Enabled(false);
        }
    } //Page_Load

    // Press the button to update.
    private void Btn_UpdateEmployee(Object sender, CommandEventArgs e)
    {
        ObjectDataSource2.Update();
    } //Btn_UpdateEmployee
</Script>
<html>
  <head>
    <title>ObjectDataSource - VJ# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <!-- The DropDownList is bound to the first ObjectDataSource. -->
        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.JSL.EmployeeLogic" />

        <p><asp:dropdownlist
          id="DropDownList1"
          runat="server"
          datasourceid="ObjectDataSource1"
          datatextfield="FullName"
          datavaluefield="EmpID"
          autopostback="True" /></p>

        <!-- The second ObjectDataSource performs the Update. This
             preserves the state of the DropDownList, which otherwise
             would rebind when the DataSourceChanged event is
             raised as a result of an Update operation. -->

        <asp:objectdatasource
          id="ObjectDataSource2"
          runat="server"
          updatemethod="UpdateEmployeeWrapper"
          typename="Samples.AspNet.JSL.EmployeeLogic">
          <updateparameters>
            <asp:controlparameter name="anID" controlid="DropDownList1" propertyname="SelectedValue" />
            <asp:formparameter name="anAddress" formfield="AddressBox" />
            <asp:formparameter name="aCity" formfield="CityBox" />
            <asp:formparameter name="aPostalCode" formfield="PostalCodeBox" />
          </updateparameters>
        </asp:objectdatasource>

        <p><asp:textbox
          id="AddressBox"
          runat="server" /></p>

        <p><asp:textbox
          id="CityBox"
          runat="server" /></p>

        <p><asp:textbox
          id="PostalCodeBox"
          runat="server" /></p>

        <asp:button
          id="Button1"
          runat="server"
          text="Update Employee"
          oncommand="Btn_UpdateEmployee" />

    </form>
  </body>
</html>

L'exemple de code suivant affiche la classe EmployeeLogic qui est utilisée dans l'exemple de code précédent.

namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations one can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList al = new ArrayList();

      // Use the SqlDataSource class to wrap the
      // ADO.NET code required to query the database.
      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

      SqlDataSource sds
        = new SqlDataSource(cts.ConnectionString,
                            "SELECT EmployeeID FROM Employees");
      try {
        IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty);

        // Iterate through the Enumeration and create a
        // NorthwindEmployee object for each ID.
        IEnumerator enumerator = IDs.GetEnumerator();
        while (enumerator.MoveNext()) {
          // The IEnumerable contains DataRowView objects.
          DataRowView row = enumerator.Current as DataRowView;
          string id = row["EmployeeID"].ToString();
          NorthwindEmployee nwe = new NorthwindEmployee(id);
          // Add the NorthwindEmployee object to the collection.
          al.Add(nwe);
        }
      }
      finally {
        // If anything strange happens, clean up.
        sds.Dispose();
      }

      return al;
    }

    public static NorthwindEmployee GetEmployee(object anID) {
      ArrayList al = GetAllEmployees() as ArrayList;
      IEnumerator enumerator = al.GetEnumerator();
      while (enumerator.MoveNext()) {
        // The IEnumerable contains initialized NorthwindEmployee objects.
        NorthwindEmployee ne = enumerator.Current as NorthwindEmployee;
        if (ne.EmpID.Equals(anID.ToString())) {
          return ne;
        }
      }
      return null;
    }
    public static void UpdateEmployee(NorthwindEmployee ne) {
      bool retval = ne.Update();
      if (! retval) { throw new NorthwindDataException("Employee update failed."); }
    }

    // This method is added as a conveniece wrapper on the original
    // implementation.
    public static void UpdateEmployeeWrapper(string anID,
                                             string anAddress,
                                             string aCity,
                                             string aPostalCode) {
      NorthwindEmployee ne = new NorthwindEmployee(anID);
      ne.Address = anAddress;
      ne.City = aCity;
      ne.PostalCode = aPostalCode;
      UpdateEmployee(ne);
    }

    // And so on...
  }

  public class NorthwindEmployee {

    public NorthwindEmployee (object anID) {
      this.ID = anID;

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];
      SqlConnection conn = new SqlConnection (cts.ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Address,City,PostalCode " +
                       " FROM Employees " +
                       " WHERE EmployeeID = @empId",
                       conn);
      // Add the employee ID parameter and set its value.
      sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString());
      SqlDataReader sdr = null;

      try {
        conn.Open();
        sdr = sc.ExecuteReader();

        // This is not a while loop. It only loops once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName       = sdr["FirstName"].ToString();
          this.lastName        = sdr["LastName"].ToString();
          this.address         = sdr["Address"].ToString();
          this.city            = sdr["City"].ToString();
          this.postalCode      = sdr["PostalCode"].ToString();
        }
        else {
          throw new NorthwindDataException("Data not loaded for employee id.");
        }
      }
      finally {
        try {
          if (sdr != null) sdr.Close();
          conn.Close();
        }
        catch (SqlException) {
          // Log an event in the Application Event Log.
          throw;
        }
      }
    }

    private object ID;
    public object EmpID {
      get { return ID; }
    }

    private string lastName;
    public string LastName {
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      set { firstName = value;  }
    }

    public string FullName {
      get { return firstName + " " + lastName; }
    }

    private string address;
    public string Address {
      get { return address; }
      set { address = value;  }
    }

    private string city;
    public string City {
      get { return city; }
      set { city = value;  }
    }

    private string postalCode;
    public string PostalCode {
      get { return postalCode; }
      set { postalCode = value;  }
    }

    public bool Update () {

      // Implement Update logic.

      return true;
    }
  }

  internal class NorthwindDataException: Exception {
    public NorthwindDataException(string msg) : base (msg) { }
  }
}

package Samples.AspNet.JSL; 

import System.*;
import System.Collections.*;
import System.Configuration.*;
import System.Data.*;
import System.Data.SqlClient.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;
   
//
// EmployeeLogic is a stateless business object that encapsulates
// the operations one can perform on a NorthwindEmployee object.
//
public class EmployeeLogic
{
    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees() throws NorthwindDataException
    {
        ArrayList al = new ArrayList();
        // Use the SqlDataSource class to wrap the
        // ADO.NET code required to query the database.
        ConnectionStringSettings cts =
            ConfigurationManager.get_ConnectionStrings().
            get_Item("NorthwindConnection");

        SqlDataSource sds = new SqlDataSource(cts.get_ConnectionString(),
            "SELECT EmployeeID FROM Employees");
        try {
            IEnumerable ids = sds.Select(DataSourceSelectArguments.get_Empty());
            // Iterate through the Enumeration and create a
            // NorthwindEmployee object for each ID.
            IEnumerator enumerator = ids.GetEnumerator();
            while (enumerator.MoveNext()) {
                // The IEnumerable contains DataRowView objects.
                DataRowView row = (DataRowView)enumerator.get_Current();
                String idObj = row.get_Item("EmployeeID").ToString();
                NorthwindEmployee nwe = new NorthwindEmployee(idObj);
                // Add the NorthwindEmployee object to the collection.
                al.Add(nwe);
            }
        }
        finally {
            // If anything strange happens, clean up.
            sds.Dispose();
        }
        return al;
    } //GetAllEmployees

    public static NorthwindEmployee GetEmployee(Object anID)
        throws NorthwindDataException
    {
        ArrayList al = (ArrayList)GetAllEmployees();
        IEnumerator enumerator = al.GetEnumerator();
        while (enumerator.MoveNext()) {
            // The IEnumerable contains initialized NorthwindEmployee objects.
            NorthwindEmployee ne = (NorthwindEmployee)enumerator.get_Current();
            if (ne.get_EmpID().Equals(anID.ToString())) {
                return ne;
            }
        }
        return null;
    } //GetEmployee

    public static void UpdateEmployee(NorthwindEmployee ne)
        throws NorthwindDataException
    {
        boolean retVal = ne.Update();
        if (!(retVal)) {
            throw new NorthwindDataException("Employee update failed.");
        }
    } //UpdateEmployee

    // This method is added as a conveniece wrapper on the original
    // implementation.
    public static void UpdateEmployeeWrapper(String anID, String anAddress,
        String aCity, String aPostalCode) throws NorthwindDataException
    {
        NorthwindEmployee ne = new NorthwindEmployee(anID);
        ne.set_Address(anAddress);
        ne.set_City(aCity);
        ne.set_PostalCode(aPostalCode);
        UpdateEmployee(ne);
    } //UpdateEmployeeWrapper
    // And so on...
} //EmployeeLogic

public class NorthwindEmployee
{
    public NorthwindEmployee(Object anID) throws NorthwindDataException
    {
        this.id = anID;

        ConnectionStringSettings cts =
			ConfigurationManager.get_ConnectionStrings().
            get_Item("NorthwindConnection");
        SqlConnection conn = new SqlConnection(cts.get_ConnectionString());
        SqlCommand sc = new SqlCommand(" SELECT FirstName,LastName,Address,"
            + "City,PostalCode " + " FROM Employees "
            + " WHERE EmployeeID = @empId", conn);
        // Add the employee ID parameter and set its value.
        sc.get_Parameters().Add(new SqlParameter("@empId", SqlDbType.Int)).
            set_Value(anID.ToString());
        SqlDataReader sdr = null;

        try {
            conn.Open();
            sdr = sc.ExecuteReader();
            // This is not a while loop. It only loops once.
            if (sdr != null && sdr.Read()) {
                // The IEnumerable contains DataRowView objects.
                this.firstName = sdr.get_Item("FirstName").ToString();
                this.lastName = sdr.get_Item("LastName").ToString();
                this.address = sdr.get_Item("Address").ToString();
                this.city = sdr.get_Item("City").ToString();
                this.postalCode = sdr.get_Item("PostalCode").ToString();
            }
            else {
                throw new NorthwindDataException("Data not loaded for"
                    + " employee id.");
            }
        }
        finally {
            try {
                if (sdr != null) {
                    sdr.Close();
                }
                conn.Close();
            }
            catch (SqlException exp) {
                // Log an event in the Application Event Log.                  
            }
        }
    } //NorthwindEmployee

    private Object id;

    /** @property 
     */
    public Object get_EmpID()
    {
        return id;
    } //get_EmpID

    private String lastName;

    /** @property 
     */
    public void set_LastName(String value)
    {
        lastName = value;
    } //set_LastName

    private String firstName;

    /** @property 
     */
    public void set_FirstName(String value)
    {
        firstName = value;
    } //set_FirstName

    /** @property 
     */
    public String get_FullName()
    {
        return firstName + " " + lastName;
    } //get_FullName

    private String address;

    /** @property 
     */
    public String get_Address()
    {
        return address;
    } //get_Address

    /** @property 
     */
    public void set_Address(String value)
    {
        address = value;
    } //set_Address

    private String city;

    /** @property
     */
    public String get_City()
    {
        return city;
    } //get_City

    /** @property
     */
    public void set_City(String value)
    {
        city = value;
    } //set_City

    private String postalCode;

    /** @property 
     */
    public String get_PostalCode()
    {
        return postalCode;
    } //get_PostalCode

    /** @property 
     */
    public void set_PostalCode(String value)
    {
        postalCode = value;
    } //set_PostalCode

    public boolean Update()
    {
        // Implement Update logic.
        return true;
    } //Update
} //NorthwindEmployee

public class NorthwindDataException extends Exception
{
    public NorthwindDataException(String msg)
    {
         super(msg);
    } //NorthwindDataException
} //NorthwindDataException

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft. Tous droits réservés.