DataBinding Class
Assembly: System.Web (in system.web.dll)
Each data-binding expression in a server control is represented at design time by an instance of the DataBinding class. Any server control that contains one or more data-binding expressions has a DataBindingCollection object that contains the DataBinding objects. This collection is accessible through the Control class implementing the IDataBindingsAccessor interface. When you create a custom RAD designer, use that implementation to access the collection. Any DataBinding or DataBindingCollection objects associated with a server control exist only at design time. They do not exist at run time and, therefore, are not accessible during run time.
The following code example creates a DataBinding object and sets it equal to an existing object in the control's DataBindingCollection collection that has a propertyName parameter with a value of Text. If the collection contains a DataBinding object with a propertyName value of Text, this code returns the value of the object's Expression property. If there is no such object, it returns an empty string ("").
// Create the custom class that accesses the DataBinding and
// DataBindingCollection classes at design time.
public class SimpleDesigner extends 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.
/** @property
*/
public String get_Text()
{
DataBinding myBinding = get_DataBindings().get_Item("Text");
if (myBinding != null) {
return myBinding.get_Expression();
}
return("");
} //get_Text
/** @property
*/
public void set_Text(String value)
{
if (value == null || value.get_Length() == 0) {
get_DataBindings().Remove("Text");
}
else {
DataBinding binding = get_DataBindings().get_Item("Text");
if (binding == null) {
binding = new DataBinding("Text", String.class.ToType(), value);
}
else {
binding.set_Expression(value);
}
// Call the DataBinding constructor, then add
// the initialized DataBinding object to the
// DataBindingCollection for this custom designer.
DataBinding binding1 = (DataBinding)(get_DataBindings().
get_SyncRoot());
get_DataBindings().Add(binding);
get_DataBindings().Add(binding1);
}
OnBindingsCollectionChanged("Text");
} //set_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 =
get_Behavior();
DataBindingCollection myDataBindingCollection;
DataBinding myDataBinding1, myDataBinding2;
String myStringReplace1, myDataBindingExpression1, removedBinding,
removedBindingAfterReplace, myDataBindingExpression2, myStringReplace2;
String removedBindings1[], removedBindings2[];
int 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 =
get_DataBindings());
if (propName != null) {
myDataBinding1 = myDataBindingCollection.get_Item(propName);
myStringReplace1 = propName.Replace(".", "-");
if (myDataBinding1 == null) {
myHtmlControlDesignBehavior.RemoveAttribute(myStringReplace1,
true);
return;
}
// DataBinding is not null.
myDataBindingExpression1 = String.Concat("<%#", myDataBinding1.
get_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 = get_DataBindings().
get_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 = get_DataBindings();
IEnumerator myEnumerator = myDataBindingCollection.GetEnumerator();
while (myEnumerator.MoveNext()) {
myDataBinding2 = (DataBinding)(myEnumerator.get_Current());
String dataBindingOutput1, dataBindingOutput2, dataBindingOutput3;
dataBindingOutput1 = String.Concat("The property name is ",
myDataBinding2.get_PropertyName());
dataBindingOutput2 = String.Concat("The property type is ",
myDataBinding2.get_PropertyType().ToString(), "-",
dataBindingOutput1);
dataBindingOutput3 = String.Concat("The expression is ",
myDataBinding2.get_Expression(), "-", dataBindingOutput2);
WriteToFile(dataBindingOutput3);
myDataBindingExpression2 = String.Concat("<%#", myDataBinding2.
get_Expression(), "%>");
myStringReplace2 = myDataBinding2.get_PropertyName().
Replace(".", "-");
myHtmlControlDesignBehavior.SetAttribute(myStringReplace2,
myDataBindingExpression2, true);
int index = myStringReplace2.IndexOf("-");
} // while loop ends
} //OnBindingsCollectionChanged
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();
ubyte byteArray[] = encoder.GetBytes(input);
char charArray[] = encoder.GetChars(byteArray);
myFile.WriteLine(charArray, 0, input.get_Length());
myFile.Close();
} //WriteToFile
- AspNetHostingPermission for operating in a hosted environment. Demand value: LinkDemand; Permission value: Minimal.