ObjectDataSource.UpdateMethod Özellik

Tanım

Denetimin verileri güncelleştirmek için çağırdığını yöntem veya işlevin ObjectDataSource adını alır veya ayarlar.

public:
 property System::String ^ UpdateMethod { System::String ^ get(); void set(System::String ^ value); };
public string UpdateMethod { get; set; }
member this.UpdateMethod : string with get, set
Public Property UpdateMethod As String

Özellik Değeri

'nin verileri güncelleştirmek için kullandığı yöntemin veya işlevin ObjectDataSource adını temsil eden bir dize. Varsayılan değer boş bir dizedir.

Örnekler

Aşağıdaki üç örnekte bir Web sayfası, arka planda kod sayfası sınıfı ve kullanıcının Northwind veritabanındaki Çalışanlar tablosundaki kayıtları alıp güncelleştirmesini sağlayan bir veri erişim sınıfı gösterilir.

İlk örnekte, iki ObjectDataSource denetim, bir denetim ve bir DropDownList denetim içeren bir Web sayfası gösterilmektedir DetailsView . İlk ObjectDataSource denetim ve denetim, veritabanından DropDownList çalışan adlarını almak ve görüntülemek için kullanılır. İkinci ObjectDataSource denetim ve DetailsView denetim, kullanıcı tarafından seçilen çalışan kaydından verileri almak, görüntülemek ve değiştirmek için kullanılır.

<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>
<form id="form1" 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>

İkinci örnekte ve Updating olayları için Selected işleyiciler gösterilmektedir. Olay işleyicisi, Selected Employee tablosundan alınan verileri içeren nesneyi serileştirir. Seri hale getirilmiş nesne görünüm durumunda depolanır. Olay Updating işleyicisi, güncelleştirilmekte olan veri kaydı için özgün verileri içeren görünüm durumundaki nesneyi seri durumdan çıkartır. Özgün verileri içeren nesne Update yöntemine parametre olarak geçirilir. Verilerin başka bir işlem tarafından değiştirilip değiştirilmediğini denetlemek için kullanılabilmesi için özgün verilerin veritabanına geçirilmesi gerekir.

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();
    }
}
Public Sub EmployeeUpdating(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs)
    Dim dcs As New DataContractSerializer(GetType(Employee))
    Dim xmlData As String
    Dim reader As XmlReader
    Dim originalEmployee As Employee

    xmlData = ViewState("OriginalEmployee").ToString()
    reader = XmlReader.Create(New StringReader(xmlData))
    originalEmployee = CType(dcs.ReadObject(reader), Employee)
    reader.Close()

    e.InputParameters.Add("originalEmployee", originalEmployee)
End Sub

Public Sub EmployeeSelected(ByVal source As Object, ByVal e As ObjectDataSourceStatusEventArgs)
    If e.ReturnValue IsNot Nothing Then
        Dim dcs As New DataContractSerializer(GetType(Employee))
        Dim sb As New StringBuilder()
        Dim writer As XmlWriter
        writer = XmlWriter.Create(sb)
        dcs.WriteObject(writer, e.ReturnValue)
        writer.Close()

        ViewState("OriginalEmployee") = sb.ToString()
    End If
End Sub

Üçüncü örnekte Northwind veritabanıyla etkileşim kuran veri erişim sınıfı gösterilmektedir. sınıfı, Çalışanlar tablosunu sorgulamak ve güncelleştirmek için LINQ kullanır. Örnek, Northwind veritabanını ve Employees tablosunu temsil eden bir LINQ to SQL sınıfı gerektirir. Daha fazla bilgi için bkz . Nasıl yapılır: Web Projesinde LINQ to SQL Sınıfları Oluşturma.

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();
    }
}
Public Class EmployeeLogic
    Public Shared Function GetFullNamesAndIDs() As Array
        Dim ndc As New NorthwindDataContext()

        Dim employeeQuery = _
            From e In ndc.Employees _
            Order By e.LastName _
            Select FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID

        Return employeeQuery.ToArray()
    End Function

    Public Shared Function GetEmployee(ByVal empID As Integer) As Employee

        If (empID < 0) Then
            Return Nothing
        Else
            Dim ndc As New NorthwindDataContext()
            Dim employeeQuery = _
                From e In ndc.Employees _
                Where e.EmployeeID = empID _
                Select e

            Return employeeQuery.Single()
        End If
    End Function

    Public Shared Sub UpdateEmployeeAddress(ByVal originalEmployee As Employee, ByVal address As String, ByVal city As String, ByVal postalcode As String)

        Dim ndc As New NorthwindDataContext()
        ndc.Employees.Attach(originalEmployee, False)
        originalEmployee.Address = address
        originalEmployee.City = city
        originalEmployee.PostalCode = postalcode
        ndc.SubmitChanges()
    End Sub
End Class

Açıklamalar

Denetim, ObjectDataSource özelliği tarafından UpdateMethod tanımlanan yöntemin güncelleştirmeleri toplu iş yerine birer birer gerçekleştirdiğini varsayar.

özelliği, UpdateMethod denetimle ilişkili nesnenin ObjectDataSourceView özelliğine temsilci UpdateMethod atarObjectDataSource.

Koleksiyondaki UpdateParameters denetim için yapılandırılan parametre adlarının ObjectDataSource seçme yöntemi tarafından döndürülen sütun adlarla eşleştiğinden emin olun.

Nesne Ömrü

özelliği tarafından UpdateMethod tanımlanan yöntem bir örnek yöntemi veya static (Shared Visual Basic'te) yöntemi olabilir. Bu bir örnek yöntemiyse, özelliği tarafından UpdateMethod belirtilen yöntem her çağrıldığında iş nesnesi oluşturulur ve yok edilir. özelliği tarafından belirtilen yöntem çağrılmadan önce iş nesnesiyle çalışmak için ve ObjectCreating olaylarını UpdateMethod işleyebilirsinizObjectCreated. Özelliği tarafından UpdateMethod belirtilen yöntem çağrıldıktan sonra oluşturulan olayı da işleyebilirsinizObjectDisposing. İş nesnesi arabirimini uygularsa IDisposable , Dispose nesne yok edilmeden önce yöntemi çağrılır. Yöntem (Shared Visual Basic'te) ise static , iş nesnesi hiçbir zaman oluşturulmaz ve , ObjectCreatingve ObjectDisposing olaylarını ObjectCreatedişleyemezsiniz.

Parametre Birleştirme

Parametreler üç kaynaktan koleksiyona UpdateParameters eklenir:

  • Veriye bağlı denetimden, çalışma zamanında.

  • öğesinden UpdateParameters bildirim temelli olarak.

  • Olay işleyicisinden Updating program aracılığıyla.

İlk olarak, veriye bağlı denetimlerden oluşturulan tüm parametreler koleksiyona UpdateParameters eklenir. Örneğin, denetim ve Numbersütunlarını Name içeren bir GridView denetime bağlıysa ObjectDataSource ve Number parametreleri Name koleksiyona eklenir. Parametrenin tam adı özelliğine OldValuesParameterFormatString bağlıdır. Bu parametrelerin veri türü şeklindedir string. Ardından, öğesinde UpdateParameters listelenen parametreler eklenir. öğesindeki UpdateParameters bir parametre, zaten koleksiyonda UpdateParameters bulunan bir parametreyle aynı ada sahip bulunursa, var olan parametre öğesinde UpdateParameters belirtilen parametreyle eşleşecek şekilde değiştirilir. Bu genellikle parametresindeki verilerin türünü değiştirmek için kullanılır. Son olarak, yöntem çalıştırılmadan önce Update gerçekleşen olayda Updating program aracılığıyla parametre ekleyebilir ve kaldırabilirsiniz. yöntemi, parametreler birleştirildikten sonra çözümlenir. Yöntem çözümlemesi sonraki bölümde açıklanmıştır.

Önemli

İstemciden aldığınız tüm parametre değerlerini doğrulamanız gerekir. Çalışma zamanı yalnızca parametre değerini özelliğiyle değiştirmektedir UpdateMethod .

Yöntem Çözümleme

Update yöntemi çağrıldığında, veriye bağlı denetimdeki veri alanları, öğesinde UpdateParameters bildirim temelli olarak oluşturulan parametreler ve olay işleyicisine eklenen parametrelerin Updating tümü birleştirilir. (Daha fazla bilgi için önceki bölüme bakın.) Denetim ObjectDataSource daha sonra çağrılacak bir yöntem bulmaya çalışır. İlk olarak, özelliğinde UpdateMethod belirtilen ada sahip bir veya daha fazla yöntem arar. Eşleşme bulunmazsa bir InvalidOperationException özel durum oluşturulur. Eşleşme bulunursa eşleşen parametre adlarını arar. Örneğin, özelliği tarafından belirtilen bir türün TypeName adlı UpdateARecordiki yöntemi olduğunu varsayalım. Birinin UpdateARecord bir parametresi ID, diğerinde UpdateARecord ise ve şeklinde iki parametresi vardır NameNumber. Koleksiyonun UpdateParameters adlı IDtek bir parametresi varsa, UpdateARecord yalnızca parametresine ID sahip yöntemi çağrılır. Parametrelerin türü, yöntemlerin çözümünde denetlenmedi. Parametrelerin sırası önemli değildir.

DataObjectTypeName özelliği ayarlanırsa yöntemi farklı bir şekilde çözümlenir. , ObjectDataSource özelliğinde belirtilen türde bir parametre alan özelliğinde UpdateMethodDataObjectTypeName belirtilen ada sahip bir yöntem arar. Bu durumda, parametrenin adı önemli değildir.

Şunlara uygulanır

Ayrıca bkz.