IEditableObject インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データ ソースとして使用されるオブジェクトの変更をコミットまたはロールバックする機能を提供します。
public interface class IEditableObject
public interface IEditableObject
type IEditableObject = interface
Public Interface IEditableObject
- 派生
例
次の例では、 インターフェイスの簡単な実装を IEditableObject 示します。 クラスは Customer
顧客情報を格納し、顧客データベースのコレクションとして使用できます。 このサンプルでは、 クラスの CustomerList
サンプル IBindingList に含まれる クラスを使用していることを前提としています。
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 ;
}
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();
}
}
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
注釈
このインターフェイスは、通常、 の BeginEdit、 EndEdit、および CancelEdit セマンティクスを DataRowViewキャプチャするために使用されます。
メソッド
BeginEdit() |
オブジェクトの編集を開始します。 |
CancelEdit() |
最後に BeginEdit() が呼び出された後に行われた変更を破棄します。 |
EndEdit() |
対象となるオブジェクトに、最後に BeginEdit() または AddNew() を呼び出した後に行われた変更を適用します。 |
適用対象
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET