ObjectDataSource.Updating Olay

Tanım

İşlemden Update() önce gerçekleşir.

C#
public event System.Web.UI.WebControls.ObjectDataSourceMethodEventHandler Updating;

Olay Türü

Ö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.

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>

İ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.

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();
    }
}

Üçü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.

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();
    }
}

Açıklamalar

Updating Denetim güncelleştirme işlemini gerçekleştirmeden önce ObjectDataSource uygulamanıza özgü ek başlatma gerçekleştirmek, parametrelerin değerlerini doğrulamak veya parametre değerlerini değiştirmek için olayı işleyin. Parametreler, nesnesi tarafından kullanıma sunulan ObjectDataSourceMethodEventArgs özelliği tarafından InputParameters erişilen bir IDictionary koleksiyon olarak kullanılabilir.

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ürün Sürümler
.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

Ayrıca bkz.