Visual Studio .NET などの RAD (Rapid Application Development) デザイナがデザイン時にデータ連結式を作成できるようにする ASP.NET サーバー コントロールの単一のデータ連結式に関する情報を格納します。このクラスは継承できません。
この型のすべてのメンバの一覧については、DataBinding メンバ を参照してください。
System.Object
System.Web.UI.DataBinding
NotInheritable Public Class DataBinding
[C#]
public sealed class DataBinding
[C++]
public __gc __sealed class DataBinding
[JScript]
public class DataBinding
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
サーバー コントロール内の各データ連結式は、デザイン時に DataBinding クラスのインスタンスによって表されます。1 つ以上のデータ連結式を格納しているサーバー コントロールには、 DataBinding オブジェクトを格納している DataBindingCollection オブジェクトがあります。このコレクションには IDataBindingsAccessor インターフェイスの Control クラス実装を通じてアクセスできます。カスタム RAD デザイナを作成する場合は、この実装を使用してコレクションにアクセスします。サーバー コントロールに関連付けられている DataBinding オブジェクトまたは DataBindingCollection オブジェクトは、デザイン時にだけ存在します。これらのオブジェクトは実行時には存在しないため、実行時にはアクセスできません。
使用例
[Visual Basic, C#, C++] DataBinding オブジェクトを作成し、 propertyName パラメータの値が Text
である DataBindingCollection の既存のオブジェクトをこれに設定する例を次に示します。 propertyName の値が Text
の DataBinding オブジェクトがコレクションに含まれている場合、このコードは、オブジェクトの Expression プロパティの値を返します。そのようなオブジェクトがない場合は、空の文字列が返されます。
' Create the custom class that accesses the DataBinding and
' DataBindingCollection classes at design time.
Public Class SimpleDesigner
Inherits System.Web.UI.Design.ControlDesigner
' Create a Text property with accessors that obtain
' the property value from and set the property value
' to the Text key in the DataBindingCollection class.
Public Property [Text]() As String
Get
Dim myBinding As DataBinding = DataBindings("Text")
If Not (myBinding Is Nothing) Then
Return myBinding.Expression
End If
Return String.Empty
End Get
Set
If value Is Nothing OrElse value.Length = 0 Then
DataBindings.Remove("Text")
Else
Dim binding As DataBinding = DataBindings("Text")
If binding Is Nothing Then
binding = New DataBinding("Text", GetType(String), value)
Else
binding.Expression = value
End If
' Call the DataBinding constructor, then add
' the initialized DataBinding object to the
' DataBindingCollection for this custom designer.
Dim binding1 As DataBinding = CType(DataBindings.SyncRoot, DataBinding)
DataBindings.Add(binding)
DataBindings.Add(binding1)
End If
OnBindingsCollectionChanged("Text")
End Set
End Property
' Override the OnBindingsCollectionChanged class to create
' the data-binding expression and associate it with
' a property on the control created by the designer.
Protected Overrides Sub OnBindingsCollectionChanged(propName As String)
Dim myHtmlControlDesignBehavior As IHtmlControlDesignerBehavior = Behavior
Dim myDataBindingCollection As DataBindingCollection
Dim myDataBinding1, myDataBinding2 As DataBinding
Dim myStringReplace1, myDataBindingExpression1, removedBinding, removedBindingAfterReplace, myDataBindingExpression2, myStringReplace2 As [String]
Dim removedBindings1(), removedBindings2() As String
Dim temp As Int32
If myHtmlControlDesignBehavior Is Nothing Then
Return
End If
myDataBindingCollection = DataBindings
' Use the DataBindingCollection constructor to
' create the myDataBindingCollection1 object.
' Then set this object equal to the
' DataBindings property of the control created
' by this custom designer.
Dim myDataBindingCollection1 As New DataBindingCollection()
myDataBindingCollection1 = DataBindings
myDataBindingCollection = DataBindings
If Not (propName Is Nothing) Then
myDataBinding1 = myDataBindingCollection(propName)
myStringReplace1 = propName.Replace(".", "-")
If myDataBinding1 Is Nothing Then
myHtmlControlDesignBehavior.RemoveAttribute(myStringReplace1, True)
Return
End If
' DataBinding is not null.
myDataBindingExpression1 = [String].Concat("<%#", myDataBinding1.Expression, "%>")
myHtmlControlDesignBehavior.SetAttribute(myStringReplace1, myDataBindingExpression1, True)
Dim index As Integer = myStringReplace1.IndexOf("-")
Else
' Use the DataBindingCollection.RemovedBindings
' property to set the value of the removedBindings
' arrays.
removedBindings1 = DataBindings.RemovedBindings
removedBindings2 = DataBindings.RemovedBindings
temp = 0
While removedBindings2.Length > temp
removedBinding = removedBindings2(temp)
removedBindingAfterReplace = removedBinding.Replace("."c, "-"c)
myHtmlControlDesignBehavior.RemoveAttribute(removedBindingAfterReplace, True)
temp = temp & 1
End While
End If
' Use the DataBindingCollection.GetEnumerator method
' to iterate through the myDataBindingCollection object
' and write the PropertyName, PropertyType, and Expression
' properties to a file for each DataBinding object
' in the MyDataBindingCollection object.
myDataBindingCollection = DataBindings
Dim myEnumerator As IEnumerator = myDataBindingCollection.GetEnumerator()
While myEnumerator.MoveNext()
myDataBinding2 = CType(myEnumerator.Current, DataBinding)
Dim dataBindingOutput1, dataBindingOutput2, dataBindingOutput3 As [String]
dataBindingOutput1 = [String].Concat("The property name is ", myDataBinding2.PropertyName)
dataBindingOutput2 = [String].Concat("The property type is ", myDataBinding2.PropertyType.ToString(), "-", dataBindingOutput1)
dataBindingOutput3 = [String].Concat("The expression is ", myDataBinding2.Expression, "-", dataBindingOutput2)
WriteToFile(dataBindingOutput3)
myDataBindingExpression2 = [String].Concat("<%#", myDataBinding2.Expression, "%>")
myStringReplace2 = myDataBinding2.PropertyName.Replace(".", "-")
myHtmlControlDesignBehavior.SetAttribute(myStringReplace2, myDataBindingExpression2, True)
Dim index As Integer = myStringReplace2.IndexOf("-"c)
End While ' while loop ends
End Sub 'OnBindingsCollectionChanged
Public Sub WriteToFile(input As String)
' The WriteToFile custom method writes
' the values of the DataBinding properties
' to a file on the C drive at design time.
Dim myFile As StreamWriter = File.AppendText("C:\DataBindingOutput.txt")
Dim encoder As New ASCIIEncoding()
Dim ByteArray As Byte() = encoder.GetBytes(input)
Dim CharArray As Char() = encoder.GetChars(ByteArray)
myFile.WriteLine(CharArray, 0, input.Length)
myFile.Close()
End Sub 'WriteToFile
End Class 'SimpleDesigner
[C#]
// Create the custom class that accesses the DataBinding and
// DataBindingCollection classes at design time.
public class SimpleDesigner : System.Web.UI.Design.ControlDesigner
{
// Create a Text property with accessors that obtain
// the property value from and set the property value
// to the Text key in the DataBindingCollection class.
public string Text
{
get
{
DataBinding myBinding = DataBindings["Text"];
if (myBinding != null)
{
return myBinding.Expression;
}
return String.Empty;
}
set
{
if ((value == null) || (value.Length == 0))
{
DataBindings.Remove("Text");
}
else
{
DataBinding binding = DataBindings["Text"];
if (binding == null)
{
binding = new DataBinding("Text", typeof(string),value );
}
else
{
binding.Expression = value;
}
// Call the DataBinding constructor, then add
// the initialized DataBinding object to the
// DataBindingCollection for this custom designer.
DataBinding binding1=(DataBinding)DataBindings.SyncRoot;
DataBindings.Add(binding);
DataBindings.Add(binding1);
}
OnBindingsCollectionChanged("Text");
}
}
// Override the OnBindingsCollectionChanged class to create
// the data-binding expression and associate it with
// a property on the control created by the designer.
protected override void OnBindingsCollectionChanged(string propName)
{
IHtmlControlDesignerBehavior myHtmlControlDesignBehavior = Behavior;
DataBindingCollection myDataBindingCollection;
DataBinding myDataBinding1,myDataBinding2;
String myStringReplace1,myDataBindingExpression1,removedBinding,removedBindingAfterReplace,myDataBindingExpression2,myStringReplace2;
string[] removedBindings1,removedBindings2;
Int32 temp;
if ( myHtmlControlDesignBehavior == null)
return;
// Use the DataBindingCollection constructor to
// create the myDataBindingCollection1 object.
// Then set this object equal to the
// DataBindings property of the control created
// by this custom designer.
DataBindingCollection myDataBindingCollection1= new DataBindingCollection();
myDataBindingCollection1=myDataBindingCollection = DataBindings;
if (propName != null)
{
myDataBinding1 = myDataBindingCollection[propName];
myStringReplace1 = propName.Replace(".","-");
if (myDataBinding1 == null)
{
myHtmlControlDesignBehavior.RemoveAttribute(myStringReplace1,true);
return;
}
// DataBinding is not null.
myDataBindingExpression1 = String.Concat("<%#",myDataBinding1.Expression,"%>");
myHtmlControlDesignBehavior.SetAttribute(myStringReplace1,myDataBindingExpression1,true);
int index = myStringReplace1.IndexOf("-");
}
else
{
// Use the DataBindingCollection.RemovedBindings
// property to set the value of the removedBindings
// arrays.
removedBindings2 = removedBindings1 = DataBindings.RemovedBindings;
temp = 0;
while(removedBindings2.Length > temp)
{
removedBinding = removedBindings2[temp];
removedBindingAfterReplace = removedBinding.Replace('.','-');
myHtmlControlDesignBehavior.RemoveAttribute(removedBindingAfterReplace,true);
temp = temp + 1;
}
}
// Use the DataBindingCollection.GetEnumerator method
// to iterate through the myDataBindingCollection object
// and write the PropertyName, PropertyType, and Expression
// properties to a file for each DataBinding object
// in the MyDataBindingCollection object.
myDataBindingCollection = DataBindings;
IEnumerator myEnumerator = myDataBindingCollection.GetEnumerator();
while(myEnumerator.MoveNext())
{
myDataBinding2 = (DataBinding)myEnumerator.Current;
String dataBindingOutput1,dataBindingOutput2,dataBindingOutput3;
dataBindingOutput1=String.Concat("The property name is ",myDataBinding2.PropertyName);
dataBindingOutput2=String.Concat("The property type is ",myDataBinding2.PropertyType.ToString(),"-",dataBindingOutput1);
dataBindingOutput3=String.Concat("The expression is ",myDataBinding2.Expression,"-",dataBindingOutput2);
WriteToFile(dataBindingOutput3);
myDataBindingExpression2 = String.Concat("<%#",myDataBinding2.Expression,"%>");
myStringReplace2 = myDataBinding2.PropertyName.Replace(".","-");
myHtmlControlDesignBehavior.SetAttribute(myStringReplace2,myDataBindingExpression2,true);
int index = myStringReplace2.IndexOf('-');
}// while loop ends
}
public void WriteToFile(string input)
{
// The WriteToFile custom method writes
// the values of the DataBinding properties
// to a file on the C drive at design time.
StreamWriter myFile= File.AppendText("C:\\DataBindingOutput.txt");
ASCIIEncoding encoder= new ASCIIEncoding();
byte[] ByteArray=encoder.GetBytes(input);
char[] CharArray=encoder.GetChars(ByteArray);
myFile.WriteLine(CharArray,0,input.Length);
myFile.Close();
}
}
[C++]
// Create the custom class that accesses the DataBinding and
// DataBindingCollection classes at design time.
public __gc class SimpleDesigner : public System::Web::UI::Design::ControlDesigner {
// Create a Text property with accessors that obtain
// the property value from and set the property value
// to the Text key in the DataBindingCollection class.
public:
__property String* get_Text() {
DataBinding* myBinding = DataBindings->Item[S"Text"];
if (myBinding != 0) {
return myBinding->Expression;
}
return String::Empty;
}
__property void set_Text(String* value) {
if ((value == 0) || (value->Length == 0)) {
DataBindings->Remove(S"Text");
} else {
DataBinding* binding = DataBindings->Item[S"Text"];
if (binding == 0) {
binding = new DataBinding(S"Text", __typeof(String), value);
} else {
binding->Expression = value;
}
// Call the DataBinding constructor, then add
// the initialized DataBinding object to the
// DataBindingCollection for this custom designer.
DataBinding* binding1=dynamic_cast<DataBinding*>(DataBindings->SyncRoot);
DataBindings->Add(binding);
DataBindings->Add(binding1);
}
OnBindingsCollectionChanged(S"Text");
}
// Override the OnBindingsCollectionChanged class to create
// the data-binding expression and associate it with
// a property on the control created by the designer.
protected:
void OnBindingsCollectionChanged(String* propName) {
IHtmlControlDesignerBehavior* myHtmlControlDesignBehavior = Behavior;
DataBindingCollection* myDataBindingCollection;
DataBinding* myDataBinding1, * myDataBinding2;
String* myStringReplace1;
String* myDataBindingExpression1;
String* removedBinding;
String* removedBindingAfterReplace;
String* myDataBindingExpression2;
String* myStringReplace2;
String* removedBindings1[];
String* removedBindings2[];
Int32 temp;
if (myHtmlControlDesignBehavior == 0)
return;
// Use the DataBindingCollection constructor to
// create the myDataBindingCollection1 object.
// Then set this object equal to the
// DataBindings property of the control created
// by this custom designer.
DataBindingCollection* myDataBindingCollection1 = new DataBindingCollection();
myDataBindingCollection1=myDataBindingCollection = DataBindings;
if (propName != 0) {
myDataBinding1 = myDataBindingCollection->Item[propName];
myStringReplace1 = propName->Replace(S".", S"-");
if (myDataBinding1 == 0) {
myHtmlControlDesignBehavior->RemoveAttribute(myStringReplace1, true);
return;
}
// DataBinding is not 0.
myDataBindingExpression1 = String::Concat(S"<%#", myDataBinding1->Expression, S"%>");
myHtmlControlDesignBehavior->SetAttribute(myStringReplace1, myDataBindingExpression1, true);
int index = myStringReplace1->IndexOf(S"-");
} else {
// Use the DataBindingCollection::RemovedBindings
// property to set the value of the removedBindings
// arrays.
removedBindings2 = removedBindings1 = DataBindings->RemovedBindings;
temp = 0;
while(removedBindings2->Length > temp) {
removedBinding = removedBindings2[temp];
removedBindingAfterReplace = removedBinding->Replace('->', '-');
myHtmlControlDesignBehavior->RemoveAttribute(removedBindingAfterReplace, true);
temp = temp + 1;
}
}
// Use the DataBindingCollection::GetEnumerator method
// to iterate through the myDataBindingCollection object
// and write the PropertyName, PropertyType, and Expression
// properties to a file for each DataBinding object
// in the MyDataBindingCollection object.
myDataBindingCollection = DataBindings;
IEnumerator* myEnumerator = myDataBindingCollection->GetEnumerator();
while(myEnumerator->MoveNext()) {
myDataBinding2 = dynamic_cast<DataBinding*>(myEnumerator->Current);
String* dataBindingOutput1, *dataBindingOutput2, *dataBindingOutput3;
dataBindingOutput1=String::Concat(S"The property name is ",
myDataBinding2->PropertyName);
dataBindingOutput2=String::Concat(S"The property type is ",
myDataBinding2->PropertyType, S"-", dataBindingOutput1);
dataBindingOutput3=String::Concat(S"The expression is ",
myDataBinding2->Expression, S"-", dataBindingOutput2);
WriteToFile(dataBindingOutput3);
myDataBindingExpression2 =
String::Concat(S"<%#", myDataBinding2->Expression, S"%>");
myStringReplace2 = myDataBinding2->PropertyName->Replace(S".", S"-");
myHtmlControlDesignBehavior->SetAttribute(myStringReplace2, myDataBindingExpression2, true);
int index = myStringReplace2->IndexOf('-');
}// while loop ends
}
public:
void WriteToFile(String* input) {
// The WriteToFile custom method writes
// the values of the DataBinding properties
// to a file on the C drive at design time.
StreamWriter* myFile= File::AppendText(S"C:\\DataBindingOutput.txt");
ASCIIEncoding* encoder = new ASCIIEncoding();
Byte ByteArray[]=encoder->GetBytes(input);
Char CharArray[] = encoder->GetChars(ByteArray);
myFile->WriteLine(CharArray, 0, input->Length);
myFile->Close();
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Web.UI
プラットフォーム: Windows 2000, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System.Web (System.Web.dll 内)
参照
DataBinding メンバ | System.Web.UI 名前空間 | DataBinder | DataBindingCollection | IDataBindingsAccessor