次の方法で共有


DataBinding クラス

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 の値が TextDataBinding オブジェクトがコレクションに含まれている場合、このコードは、オブジェクトの 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