IEditableObject 介面

定義

對用來做為資料來源的物件,提供進行變更之認可或復原的功能。

C#
public interface IEditableObject
衍生

範例

下列範例提供 介面的簡單實作 IEditableObject 。 類別 Customer 會儲存客戶資訊,並可作為客戶資料庫的集合。 此範例假設您已使用 CustomerList 類別,該類別可在 類別的範例中找到 IBindingList

C#
public class Customer : IEditableObject
{

    struct CustomerData
    {
        internal string id ;
        internal string firstName ;
        internal string lastName ;
    }

    private CustomersList parent;
    private CustomerData custData;
    private CustomerData backupData;
    private bool inTxn = false;

    // Implements IEditableObject
    void IEditableObject.BeginEdit()
    {
        Console.WriteLine("Start BeginEdit");
        if (!inTxn)
        {
            this.backupData = custData;
            inTxn = true;
            Console.WriteLine("BeginEdit - " + this.backupData.lastName);
        }
        Console.WriteLine("End BeginEdit");
    }

    void IEditableObject.CancelEdit()
    {
        Console.WriteLine("Start CancelEdit");
        if (inTxn)
        {
            this.custData = backupData;
            inTxn = false;
            Console.WriteLine("CancelEdit - " + this.custData.lastName);
        }
        Console.WriteLine("End CancelEdit");
    }

    void IEditableObject.EndEdit()
    {
        Console.WriteLine("Start EndEdit" + this.custData.id + this.custData.lastName);
        if (inTxn)
        {
            backupData = new CustomerData();
            inTxn = false;
            Console.WriteLine("Done EndEdit - " + this.custData.id + this.custData.lastName);
        }
        Console.WriteLine("End EndEdit");
    }

    public Customer(string ID) : base()
    {
        this.custData = new CustomerData();
        this.custData.id = ID;
        this.custData.firstName = "";
        this.custData.lastName = "";
    }

    public string ID
    {
        get
        {
            return this.custData.id;
        }
    }

    public string FirstName
    {
        get
        {
            return this.custData.firstName;
        }
        set
        {
            this.custData.firstName = value;
            this.OnCustomerChanged();
        }
    }

    public string LastName
    {
        get
        {
            return this.custData.lastName;
        }
        set
        {
            this.custData.lastName = value;
            this.OnCustomerChanged();
        }
    }

    internal CustomersList Parent
    {
        get
        {
            return parent;
        }
        set
        {
            parent = value ;
        }
    }

    private void OnCustomerChanged()
    {
        if (!inTxn && Parent != null)
        {
            Parent.CustomerChanged(this);
        }
    }
    
    public override string ToString()
    {
        StringWriter sb = new StringWriter();
        sb.Write(this.FirstName);
        sb.Write(" ");
        sb.Write(this.LastName);
        return sb.ToString();
    }
}

備註

這個介面通常用來擷取 BeginEdit的、 EndEditCancelEdit 語意 DataRowView

方法

BeginEdit()

開始對物件進行編輯。

CancelEdit()

捨棄從上次 BeginEdit() 呼叫以來所做的變更。

EndEdit()

推入自從上次對基礎物件的 BeginEdit()AddNew() 呼叫所做的變更。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 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
.NET Standard 2.0, 2.1
UWP 10.0