Auf Englisch lesen

Teilen über


ObjectDataSource.UpdateMethod Eigenschaft

Definition

Ruft den Namen der Methode oder der Funktion ab, die vom ObjectDataSource-Steuerelement zum Aktualisieren von Daten aufgerufen wird, oder legt diesen fest.

C#
public string UpdateMethod { get; set; }

Eigenschaftswert

Eine Zeichenfolge, die den Namen der Methode oder der Funktion darstellt, mit deren Hilfe die ObjectDataSource Daten aktualisiert. Der Standardwert ist eine leere Zeichenfolge.

Beispiele

Die folgenden drei Beispiele zeigen eine Webseite, eine CodeBehind-Seitenklasse und eine Datenzugriffsklasse, mit der ein Benutzer Datensätze in der Tabelle Employees in der Northwind-Datenbank abrufen und aktualisieren kann.

Das erste Beispiel zeigt eine Webseite, die zwei ObjectDataSource Steuerelemente enthält, ein DropDownList -Steuerelement und ein DetailsView -Steuerelement. Das erste ObjectDataSource Steuerelement und das DropDownList Steuerelement werden verwendet, um Mitarbeiternamen aus der Datenbank abzurufen und anzuzeigen. Das zweite ObjectDataSource Steuerelement und das DetailsView Steuerelement werden verwendet, um die Daten aus dem vom Benutzer ausgewählten Mitarbeiterdatensatz abzurufen, anzuzeigen und zu ändern.

ASP.NET (C#)
<form id="Form1" method="post" runat="server">

    <asp:objectdatasource
      ID="ObjectDataSource1"
      runat="server"
      SelectMethod="GetFullNamesAndIDs"
      TypeName="Samples.AspNet.CS.EmployeeLogic" />

    <p>
    <asp:dropdownlist
      ID="DropDownList1"
      runat="server" 
      DataSourceID="ObjectDataSource1"
      DataTextField="FullName"
      DataValueField="EmployeeID" 
      AutoPostBack="True" 
      AppendDataBoundItems="true">
        <asp:ListItem Text="Select One" Value=""></asp:ListItem>
    </asp:dropdownlist>
    </p>

    <asp:objectdatasource
      ID="ObjectDataSource2"
      runat="server"
      SelectMethod="GetEmployee"
      UpdateMethod="UpdateEmployeeAddress"
      OnUpdating="EmployeeUpdating"
      OnSelected="EmployeeSelected"
      TypeName="Samples.AspNet.CS.EmployeeLogic" >
      <SelectParameters>
        <asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
      </SelectParameters>
    </asp:objectdatasource>
    
    <asp:DetailsView
        ID="DetailsView1"
        runat="server"
        DataSourceID="ObjectDataSource2" 
        AutoGenerateRows="false"
        AutoGenerateEditButton="true">  
        <Fields>
            <asp:BoundField HeaderText="Address" DataField="Address" />
            <asp:BoundField HeaderText="City" DataField="City" />
            <asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
        </Fields>  
    </asp:DetailsView>
   
</form>

Das zweite Beispiel zeigt Handler für die Selected Ereignisse und Updating . Der Selected Ereignishandler serialisiert das Objekt, das Daten enthält, die aus der Employee-Tabelle abgerufen wurden. Das serialisierte Objekt wird im Ansichtszustand gespeichert. Der Updating Ereignishandler deserialisiert das Objekt im Ansichtszustand, der die ursprünglichen Daten für den zu aktualisierenden Datensatz enthält. Das Objekt, das die ursprünglichen Daten enthält, wird als Parameter an die Update-Methode übergeben. Die ursprünglichen Daten müssen an die Datenbank übergeben werden, damit sie verwendet werden können, um zu überprüfen, ob die Daten von einem anderen Prozess geändert wurden.

C#
public void EmployeeUpdating(object source, ObjectDataSourceMethodEventArgs e)
{
    DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));

    String xmlData = ViewState["OriginalEmployee"].ToString();
    XmlReader reader = XmlReader.Create(new StringReader(xmlData));
    Employee originalEmployee = (Employee)dcs.ReadObject(reader);
    reader.Close();

    e.InputParameters.Add("originalEmployee", originalEmployee);
}

public void EmployeeSelected(object source, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue != null)
    {
        DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));
        StringBuilder sb = new StringBuilder();
        XmlWriter writer = XmlWriter.Create(sb);
        dcs.WriteObject(writer, e.ReturnValue);
        writer.Close();

        ViewState["OriginalEmployee"] = sb.ToString();
    }
}

Das dritte Beispiel zeigt die Datenzugriffsklasse, die mit der Northwind-Datenbank interagiert. Die -Klasse verwendet LINQ, um die Employees-Tabelle abzufragen und zu aktualisieren. Das Beispiel erfordert eine LINQ to SQL-Klasse, die die Northwind-Datenbank und die Employees-Tabelle darstellt. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen von LINQ to SQL-Klassen in einem Webprojekt.

C#
public class EmployeeLogic
{
    public static Array GetFullNamesAndIDs()
    {
        NorthwindDataContext ndc = new NorthwindDataContext();

        var employeeQuery =
            from e in ndc.Employees
            orderby e.LastName
            select new { FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID };

        return employeeQuery.ToArray();
    }

    public static Employee GetEmployee(int empID)
    {
        if (empID < 0)
        {
            return null;
        }
        else
        {
            NorthwindDataContext ndc = new NorthwindDataContext();
            var employeeQuery =
                from e in ndc.Employees
                where e.EmployeeID == empID
                select e;

            return employeeQuery.Single();
        }
    }
 
    public static void UpdateEmployeeAddress(Employee originalEmployee, string address, string city, string postalcode)
    {
        NorthwindDataContext ndc = new NorthwindDataContext();
        ndc.Employees.Attach(originalEmployee, false);
        originalEmployee.Address = address;
        originalEmployee.City = city;
        originalEmployee.PostalCode = postalcode;
        ndc.SubmitChanges();
    }
}

Hinweise

Das ObjectDataSource Steuerelement geht davon aus, dass die von der UpdateMethod -Eigenschaft identifizierte Methode updates einzeln und nicht in einem Batch ausführt.

Die UpdateMethod -Eigenschaft delegiert die UpdateMethod Eigenschaft des ObjectDataSourceView Objekts, das dem ObjectDataSource Steuerelement zugeordnet ist.

Stellen Sie sicher, dass die für das Steuerelement in der ObjectDataSourceUpdateParameters Auflistung konfigurierten Parameternamen mit den Spaltennamen übereinstimmen, die von der select-Methode zurückgegeben werden.

Lebensdauer eines Objekts

Die von der UpdateMethod -Eigenschaft identifizierte Methode kann eine Instanzmethode oder eine static (Shared in Visual Basic) Methode sein. Wenn es sich um eine Instanzmethode handelt, wird das Geschäftsobjekt jedes Mal erstellt und zerstört, wenn die von der UpdateMethod -Eigenschaft angegebene Methode aufgerufen wird. Sie können die ObjectCreated Ereignisse und ObjectCreating behandeln, um mit dem Geschäftsobjekt zu arbeiten, bevor die von der UpdateMethod -Eigenschaft angegebene Methode aufgerufen wird. Sie können auch das ObjectDisposing Ereignis behandeln, das ausgelöst wird, nachdem die von der UpdateMethod -Eigenschaft angegebene Methode aufgerufen wird. Wenn das Geschäftsobjekt die IDisposable Schnittstelle implementiert, wird die Dispose -Methode aufgerufen, bevor das Objekt zerstört wird. Wenn die -Methode (Shared in Visual Basic) lautet static , wird das Geschäftsobjekt nie erstellt, und Sie können die ObjectCreatedEreignisse , ObjectCreatingund ObjectDisposing nicht verarbeiten.

Parameterzusammenführung

Parameter werden der UpdateParameters Auflistung aus drei Quellen hinzugefügt:

  • Aus dem datengebundenen Steuerelement zur Laufzeit.

  • Deklarativ aus dem UpdateParameters Element.

  • Programmgesteuert aus dem Updating Ereignishandler.

Zunächst werden alle Parameter, die aus datengebundenen Steuerelementen generiert werden, der UpdateParameters Auflistung hinzugefügt. Wenn das ObjectDataSource Steuerelement beispielsweise an ein GridView Steuerelement gebunden ist, das die Spalten Name und Numberenthält, werden die Parameter für Name und Number der Auflistung hinzugefügt. Der genaue Name des Parameters hängt von der OldValuesParameterFormatString -Eigenschaft ab. Der Datentyp dieser Parameter ist string. Als Nächstes werden die Parameter hinzugefügt, die UpdateParameters im -Element aufgeführt sind. Wenn ein Parameter im UpdateParameters -Element mit demselben Namen gefunden wird wie ein Parameter, der sich bereits in der UpdateParameters Auflistung befindet, wird der vorhandene Parameter so geändert, dass er mit dem im UpdateParameters -Element angegebenen Parameter übereinstimmt. In der Regel wird dies verwendet, um den Typ der Daten im Parameter zu ändern. Schließlich können Sie parameter in dem Updating Ereignis programmgesteuert hinzufügen und entfernen, das vor der Ausführung der Update Methode auftritt. Die -Methode wird aufgelöst, nachdem die Parameter zusammengeführt wurden. Die Methodenauflösung wird im nächsten Abschnitt erläutert.

Wichtig

Sie sollten jeden Parameterwert überprüfen, den Sie vom Client erhalten. Die Runtime ersetzt einfach den Parameterwert in der UpdateMethod -Eigenschaft.

Methodenauflösung

Wenn die Update Methode aufgerufen wird, werden die Datenfelder aus dem datengebundenen Steuerelement, die Parameter, die deklarativ im UpdateParameters Element erstellt wurden, und die Parameter, die Updating im Ereignishandler hinzugefügt wurden, zusammengeführt. (Weitere Informationen finden Sie im vorherigen Abschnitt.) Das ObjectDataSource Steuerelement versucht dann, eine methode zu finden, die aufgerufen werden soll. Zunächst wird nach einer oder mehreren Methoden mit dem in der UpdateMethod -Eigenschaft angegebenen Namen gesucht. Wenn keine Übereinstimmung gefunden wird, wird eine InvalidOperationException Ausnahme ausgelöst. Wenn eine Übereinstimmung gefunden wird, wird nach übereinstimmenden Parameternamen gesucht. Angenommen, ein Typ, der von der TypeName -Eigenschaft angegeben wird, verfügt über zwei Methoden mit dem Namen UpdateARecord. Einer UpdateARecord verfügt über einen Parameter, IDund der andere UpdateARecord verfügt über zwei Parameter und NumberName . Wenn die UpdateParameters Auflistung nur über einen Parameter namens verfügt ID, wird die UpdateARecord -Methode mit nur dem ID -Parameter aufgerufen. Der Typ des Parameters wird beim Auflösen der Methoden nicht überprüft. Die Reihenfolge der Parameter spielt keine Rolle.

Wenn die DataObjectTypeName -Eigenschaft festgelegt ist, wird die -Methode auf eine andere Weise aufgelöst. Sucht ObjectDataSource nach einer Methode mit dem Namen, der in der UpdateMethod -Eigenschaft angegeben ist, die einen Parameter des typs akzeptiert, der in der DataObjectTypeName -Eigenschaft angegeben ist. In diesem Fall spielt der Name des Parameters keine Rolle.

Gilt für:

Produkt Versionen
.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

Weitere Informationen