ObjectDataSourceMethodEventArgs Třída

Definice

Poskytuje data pro Insertingudálosti ObjectDataSource ovládacího prvku , Updatinga Deleting .

public class ObjectDataSourceMethodEventArgs : System.ComponentModel.CancelEventArgs
Dědičnost
ObjectDataSourceMethodEventArgs
Odvozené

Příklady

Tato část obsahuje dva příklady kódu. První příklad kódu ukazuje, jak použít ovládací prvek ObjectDataSource s obchodním objektem a ovládacím DetailsView prvku pro vložení dat. Druhý příklad kódu poskytuje příklad obchodního objektu střední vrstvy, který se používá v prvním příkladu kódu.

Následující příklad kódu ukazuje, jak použít ovládací prvek ObjectDataSource s obchodním objektem a ovládacím DetailsView prvku pro vložení dat. Na DetailsView začátku se zobrazí nový NorthwindEmployee záznam spolu s automaticky vygenerovaným tlačítkem Vložit . Po zadání dat do polí DetailsView ovládacího prvku klikněte na tlačítko Vložit a InsertMethod vlastnost určí, která metoda provede Insert akci.

V tomto příkladu UpdateEmployeeInfo se metoda používá k provedení vložení, ale vyžaduje NorthwindEmployee parametr pro vložení dat. Z tohoto důvodu kolekce řetězců, které DetailsView ovládací prvek automaticky předává, není dostačující. Delegát NorthwindEmployeeInserting je ObjectDataSourceMethodEventHandler objekt, který zpracovává Inserting událost a umožňuje manipulaci se vstupními parametry před zahájením Insert operace. Vzhledem k tomu, že UpdateEmployeeInfo metoda vyžaduje NorthwindEmployee objekt jako parametr, vytvoří se pomocí kolekce řetězců a přidá se do InputParameters kolekce.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void NorthwindEmployeeInserting(object source, ObjectDataSourceMethodEventArgs e)
{
  // The business object expects a custom type. Build it
  // and add it to the parameters collection.
  
  IDictionary paramsFromPage = e.InputParameters;

  NorthwindEmployee ne = new NorthwindEmployee();

  ne.FirstName  = paramsFromPage["FirstName"].ToString();
  ne.LastName   = paramsFromPage["LastName"].ToString();
  ne.Title      = paramsFromPage["Title"].ToString();
  ne.Courtesy   = paramsFromPage["Courtesy"].ToString();
  ne.Supervisor = Int32.Parse(paramsFromPage["Supervisor"].ToString());

  paramsFromPage.Clear();
  paramsFromPage.Add("ne", ne);
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:detailsview
          id="DetailsView1"
          runat="server"
          autogenerateinsertbutton="True"
          datasourceid="ObjectDataSource1">
        </asp:detailsview>

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetEmployee"
          insertmethod="UpdateEmployeeInfo"
          oninserting="NorthwindEmployeeInserting"
          typename="Samples.AspNet.CS.EmployeeLogic"
          >
          <selectparameters>
            <asp:parameter name="anID" defaultvalue="-1" />
          </selectparameters>
        </asp:objectdatasource>

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

Následující příklad kódu obsahuje příklad obchodního objektu střední vrstvy, který používá předchozí příklad kódu. Následující seznam popisuje dvě hlavní třídy, které jsou definovány v příkladu kódu:

  • Třída EmployeeLogic , což je bezstavová třída, která zapouzdřuje obchodní logiku.

  • Třída NorthwindEmployee , což je třída modelu, která obsahuje pouze základní funkce potřebné k načtení a uchování dat z datové vrstvy.

Kromě toho NorthwindDataException je třída k dispozici jako pohodlí.

Tato sada ukázkových tříd používá databázi Northwind Traders, což je ukázková databáze dostupná s Microsoft SQL Server a Microsoft Accessem. Pro úplný funkční příklad použijte tyto třídy tak, že je umístíte do adresáře App_Code pod kořen aplikace nebo jejich kompilací a umístěním výsledné knihovny DLL do adresáře Bin. Metoda UpdateEmployeeInfo není zcela implementována, takže při experimentování s tímto příkladem nebudete do databáze Northwind Traders vkládat data.

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 you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

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

      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) {
      if (anID.Equals("-1") ||
          anID.Equals(DBNull.Value) ) {
        return new NorthwindEmployee();
      }
      else {
        return new NorthwindEmployee(anID);
      }
    }

    public static void UpdateEmployeeInfo(NorthwindEmployee ne) {
      bool retval = ne.Save();
      if (!retval) { throw new NorthwindDataException("UpdateEmployee failed."); }
    }

    public static void DeleteEmployee(NorthwindEmployee ne) {
      bool retval = ne.Delete();
      if (!retval) { throw new NorthwindDataException("DeleteEmployee failed."); }
    }

    // And so on...
  }

  public class NorthwindEmployee {

    public NorthwindEmployee () {
      ID = DBNull.Value;
      lastName = "";
      firstName = "";
      title="";
      titleOfCourtesy = "";
      reportsTo = -1;
    }

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

      SqlConnection conn
        = new SqlConnection (ConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " +
                       " 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();

        // Only loop once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName        = sdr["FirstName"].ToString();
          this.lastName         = sdr["LastName"].ToString();
          this.title            = sdr["Title"].ToString();
          this.titleOfCourtesy  = sdr["TitleOfCourtesy"].ToString();
          if (!sdr.IsDBNull(4)) {
            this.reportsTo        = sdr.GetInt32(4);
          }
        }
        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 string EmpID {
      get { return ID.ToString();  }
    }

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

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

    public string FullName {
      get { return FirstName + " " + LastName; }
    }

    private string title;
    public String Title {
      get { return title; }
      set { title = value; }
    }

    private string titleOfCourtesy;
    public string Courtesy {
      get { return titleOfCourtesy; }
      set { titleOfCourtesy = value; }
    }

    private int    reportsTo;
    public int Supervisor {
      get { return reportsTo; }
      set { reportsTo = value; }
    }

    public bool Save () {
      // Implement persistence logic.
      return true;
    }

    public bool Delete () {
      // Implement delete logic.
      return true;
    }
  }

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

Poznámky

Třída ObjectDataSourceMethodEventArgs se používá v OnSelectingmetodách , OnUpdating, OnInsertinga OnDeleting k poskytnutí přístupu ke vstupním parametrům, které jsou předány Selectmetodám ObjectDataSource ovládacího prvku , Update, Deletea Insert . K těmto parametrům se přistupuje pomocí InputParameters vlastnosti . Přidáním delegáta pro zpracování Selectingudálosti , Updating, Insertingnebo Deleting můžete prozkoumat hodnoty parametrů a manipulovat s nimi a provést další předzpracování, které je potřeba. Jakékoli změny parametrů v tomto slovníku ovlivní, které přetížení metody je volána pro operaci. DataObjectTypeName ObjectDataSource Když je vlastnost ovládacího prvku nastavena, můžete upravit pouze vlastnosti datového objektu pro položky v tomto slovníku; nemůžete přidat ani odebrat parametry. Další informace naleznete v tématu Delete.

Ovládací ObjectDataSource prvek zveřejňuje mnoho událostí, které můžete zpracovat při práci se základním obchodním objektem v různých časech jeho životního cyklu. Následující tabulka uvádí události a přidružené EventArgs třídy a delegáty obslužné rutiny událostí.

Událost Třída EventArgs Delegát obslužné rutiny události
ObjectCreating.

Nastane bezprostředně před vytvořením instance obchodního objektu.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
ObjectCreated.

Nastane okamžitě po vytvoření instance obchodního objektu.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
Selecting.

Nastane před načtením dat.
ObjectDataSourceSelectingEventArgs ObjectDataSourceSelectingEventHandler
Inserting, Updatinga Deleting.

Nastane před provedením operace vložení, aktualizace nebo odstranění.
ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventHandler
Selected.

Nastane po načtení dat.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
Inserted, Updateda Deleted.

Nastane po dokončení operace vložení, aktualizace nebo odstranění.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
ObjectDisposing.

Nastane před zničením obchodního objektu.
ObjectDataSourceDisposingEventArgs ObjectDataSourceDisposingEventHandler

Konstruktory

ObjectDataSourceMethodEventArgs(IOrderedDictionary)

Inicializuje novou instanci ObjectDataSourceMethodEventArgs třídy pomocí zadané kolekce vstupních parametrů.

Vlastnosti

Cancel

Získá nebo nastaví hodnotu označující, zda má být událost zrušena.

(Zděděno od CancelEventArgs)
InputParameters

Získá kolekci, která obsahuje parametry metody obchodního objektu a jejich hodnoty.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Produkt Verze
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Viz také