Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

IEditableObject Interface

Definition

Namespace:
System.ComponentModel
Assemblies:
System.dll, System.ComponentModel.dll
Assemblies:
netstandard.dll, System.ComponentModel.dll
Assembly:
System.ComponentModel.dll
Assembly:
System.dll
Assembly:
netstandard.dll
Source:
IEditableObject.cs
Source:
IEditableObject.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Provides functionality to commit or rollback changes to an object that is used as a data source.

public interface class IEditableObject
public interface IEditableObject
type IEditableObject = interface
Public Interface IEditableObject
Derived

Examples

The following sample provides a simple implementation of the IEditableObject interface. The Customer class stores customer information and can be used as a collection for a customer database. This sample assumes that you have used the CustomerList class that can be found in sample in the IBindingList class.

public ref class Customer: public IEditableObject
{
private:
 ref struct CustomerData
 {
 internal:
 String^ id;
 String^ firstName;
 String^ lastName;
 };

internal:
 CustomersList^ parent;
 CustomerData^ custData;
 CustomerData^ backupData;
 bool inTxn;

 // Implements IEditableObject
public:
 virtual void BeginEdit()
 {
 Console::WriteLine( "Start BeginEdit" );
 if ( !inTxn )
 {
 this->backupData = custData;
 inTxn = true;
 Console::WriteLine( "BeginEdit - {0}", this->backupData->lastName );
 }

 Console::WriteLine( "End BeginEdit" );
 }

 virtual void CancelEdit()
 {
 Console::WriteLine( "Start CancelEdit" );
 if ( inTxn )
 {
 this->custData = backupData;
 inTxn = false;
 Console::WriteLine( "CancelEdit - {0}", this->custData->lastName );
 }

 Console::WriteLine( "End CancelEdit" );
 }

 virtual void EndEdit()
 {
 Console::WriteLine( "Start EndEdit{0}{1}", this->custData->id, this->custData->lastName );
 if ( inTxn )
 {
 backupData = gcnew CustomerData;
 inTxn = false;
 Console::WriteLine( "Done EndEdit - {0}{1}", this->custData->id, this->custData->lastName );
 }

 Console::WriteLine( "End EndEdit" );
 }


public:

 Customer( String^ ID )
 {
 this->custData = gcnew CustomerData;
 this->custData->id = ID;
 this->custData->firstName = "";
 this->custData->lastName = "";
 inTxn = false;
 }

 property String^ ID 
 {
 String^ get()
 {
 return this->custData->id;
 }

 }

 property String^ FirstName 
 {
 String^ get()
 {
 return this->custData->firstName;
 }

 void set( String^ value )
 {
 this->custData->firstName = value;
 this->OnCustomerChanged();
 }

 }

 property String^ LastName 
 {
 String^ get()
 {
 return this->custData->lastName;
 }

 void set( String^ value )
 {
 this->custData->lastName = value;
 this->OnCustomerChanged();
 }

 }

internal:

 property CustomersList^ Parent 
 {
 CustomersList^ get()
 {
 return parent;
 }

 void set( CustomersList^ value )
 {
 parent = value;
 }

 }

 void OnCustomerChanged()
 {
 if (!inTxn && Parent != nullptr)
 {
 Parent->CustomerChanged(this);
 }
 }

public:
 virtual String^ ToString() override
 {
 StringWriter^ sb = gcnew StringWriter;
 sb->Write( this->FirstName );
 sb->Write( " " );
 sb->Write( this->LastName );
 return sb->ToString();
 }
};
public class Customer : IEditableObject
{
 struct CustomerData
 {
 internal string id;
 internal string firstName;
 internal string lastName;
 }

 CustomerData custData;
 CustomerData backupData;
 bool inTxn;

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

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

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

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

 public string ID => custData.id;

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

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

 internal CustomersList Parent { get; set; }

 void OnCustomerChanged()
 {
 if (!inTxn && Parent != null)
 {
 Parent.CustomerChanged(this);
 }
 }

 public override string ToString()
 {
 StringWriter sb = new();
 sb.Write(FirstName);
 sb.Write(" ");
 sb.Write(LastName);
 return sb.ToString();
 }
}
Public Class Customer
 Implements IEditableObject

 Structure CustomerData
 Friend id As String
 Friend firstName As String
 Friend lastName As String
 End Structure 

 Public parent As CustomersList
 Private custData As CustomerData
 Private backupData As CustomerData
 Private inTxn As Boolean = False


 ' Implements IEditableObject
 Sub BeginEdit() Implements IEditableObject.BeginEdit
 Console.WriteLine("Start BeginEdit")
 If Not inTxn Then
 Me.backupData = custData
 inTxn = True
 Console.WriteLine(("BeginEdit - " + Me.backupData.lastName))
 End If
 Console.WriteLine("End BeginEdit")
 End Sub 


 Sub CancelEdit() Implements IEditableObject.CancelEdit
 Console.WriteLine("Start CancelEdit")
 If inTxn Then
 Me.custData = backupData
 inTxn = False
 Console.WriteLine(("CancelEdit - " + Me.custData.lastName))
 End If
 Console.WriteLine("End CancelEdit")
 End Sub 


 Sub EndEdit() Implements IEditableObject.EndEdit
 Console.WriteLine(("Start EndEdit" + Me.custData.id + Me.custData.lastName))
 If inTxn Then
 backupData = New CustomerData()
 inTxn = False
 Console.WriteLine(("Done EndEdit - " + Me.custData.id + Me.custData.lastName))
 End If
 Console.WriteLine("End EndEdit")
 End Sub 


 Public Sub New(ByVal ID As String)
 Me.custData = New CustomerData()
 Me.custData.id = ID
 Me.custData.firstName = ""
 Me.custData.lastName = ""
 End Sub 


 Public ReadOnly Property ID() As String
 Get
 Return Me.custData.id
 End Get
 End Property


 Public Property FirstName() As String
 Get
 Return Me.custData.firstName
 End Get
 Set(ByVal Value As String)
 Me.custData.firstName = Value
 Me.OnCustomerChanged()
 End Set
 End Property


 Public Property LastName() As String
 Get
 Return Me.custData.lastName
 End Get
 Set(ByVal Value As String)
 Me.custData.lastName = Value
 Me.OnCustomerChanged()
 End Set
 End Property


 Friend Property Parents() As CustomersList
 Get
 Return Parent
 End Get
 Set(ByVal Value As CustomersList)
 parent = Value
 End Set
 End Property


 Private Sub OnCustomerChanged()
 If Not inTxn And (Parent IsNot Nothing) Then
 Parent.CustomerChanged(Me)
 End If
 End Sub 

 
 Public Overrides Function ToString() As String
 Dim sb As New StringWriter()
 sb.Write(Me.FirstName)
 sb.Write(" ")
 sb.Write(Me.LastName)
 Return sb.ToString()
 End Function 
End Class

Remarks

This interface is typically used to capture the BeginEdit, EndEdit, and CancelEdit semantics of a DataRowView.

Methods

Name Description
BeginEdit()

Begins an edit on an object.

CancelEdit()

Discards changes since the last BeginEdit() call.

EndEdit()

Pushes changes since the last BeginEdit() or AddNew() call into the underlying object.

Applies to


Feedback

Was this page helpful?