DataBinding 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
包含有关 ASP.NET 服务器控件中的单个数据绑定表达式的信息,这些信息可让快速应用程序开发 (RAD) 设计器(如 Microsoft Visual Studio)能够在设计时创建数据绑定表达式。 此类不能被继承。
public ref class DataBinding sealed
public sealed class DataBinding
type DataBinding = class
Public NotInheritable Class DataBinding
- 继承
-
DataBinding
示例
下面的代码示例创建一个 DataBinding 对象并将其设置为控件集合 DataBindingCollection 中的现有对象,该对象具有 propertyName
值 Text
的参数。 如果集合包含一个DataBinding值为的对象propertyName``Text
,则此代码返回对象的Expression属性的值。 如果没有此类对象,它将返回空字符串 (“”) 。
// 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);
}
PropertyChanged("Text");
}
}
protected void PropertyChanged(string propName)
{
IControlDesignerTag myHtmlControlDesignBehavior = this.Tag;
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 (myDataBindingCollection.Contains(propName))
{
myDataBinding1 = myDataBindingCollection[propName];
myStringReplace1 = propName.Replace(".", "-");
if (myDataBinding1 == null)
{
myHtmlControlDesignBehavior.RemoveAttribute(myStringReplace1);
return;
}
// DataBinding is not null.
myDataBindingExpression1 = String.Concat("<%#", myDataBinding1.Expression, "%>");
myHtmlControlDesignBehavior.SetAttribute(myStringReplace1, myDataBindingExpression1);
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);
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);
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();
}
}
' 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(ByVal value As String)
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
PropertyChanged("Text")
End Set
End Property
Protected Sub PropertyChanged(ByVal propName As String)
Dim myHtmlControlDesignBehavior As IControlDesignerTag = Me.Tag
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 (myDataBindingCollection.Contains(propName)) Then
myDataBinding1 = myDataBindingCollection(propName)
myStringReplace1 = propName.Replace(".", "-")
If myDataBinding1 Is Nothing Then
myHtmlControlDesignBehavior.RemoveAttribute(myStringReplace1)
Return
End If
' DataBinding is not null.
myDataBindingExpression1 = [String].Concat("<%#", myDataBinding1.Expression, "%>")
myHtmlControlDesignBehavior.SetAttribute(myStringReplace1, myDataBindingExpression1)
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)
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)
Dim index As Integer = myStringReplace2.IndexOf("-"c)
End While ' while loop ends
End Sub
Public Sub WriteToFile(ByVal 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
End Class
注解
服务器控件中的每个数据绑定表达式在设计时由类的 DataBinding 实例表示。 包含一个或多个数据绑定表达式的任何服务器控件都有一个 DataBindingCollection 包含 DataBinding 对象的对象。 可通过实现接口的IDataBindingsAccessor类访问Control此集合。 创建自定义 RAD 设计器时,请使用该实现访问集合。 与服务器控件关联的任何 DataBinding 或 DataBindingCollection 对象仅在设计时存在。 它们不存在于运行时,因此在运行时不可访问。
构造函数
DataBinding(String, Type, String) |
初始化 DataBinding 类的新实例。 |
属性
Expression |
获取或设置要计算的数据绑定表达式。 |
PropertyName |
获取要将数据绑定到的 ASP.NET 服务器控件属性的名称。 |
PropertyType |
获取数据绑定 ASP.NET 服务器控件属性的 .NET Framework 类型。 |
方法
Equals(Object) |
确定指定的对象与当前对象是否是 DataBinding 类的同一实例。 |
GetHashCode() |
检索 DataBinding 对象的实例的哈希代码。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |