绑定XmlDocument对象
by Dan Wahlin
数据绑定是.NET平台上的一个强大功能,它能使你将不同的数据源绑定到DataGrid、DataList和Repeater控件上。将DataTable、ArrayList或者Hashtable这类数据源绑定到控件上是非常容易的,但你可能经常需要将它们绑定到一个XmlDocument上。这种情况尤其体现在你使用的组件返回的是一个XmlDocument而不是来自某个方法的一个DataSet时。
虽然由于XmlDocument对象不支持IList等接口而使你无法直接将它绑定到控件上,但是实现绑定并不复杂。事实上,你只需编写几行代码便可将它绑定到一个DataSet中,然后通过DataSet将它绑定到其他控件上。
它的诀窍在于使用了System.Xml命名空间下的XmlNodeReader类。这个特定的类是从XmlReader中继承而来的,而且它能够将XmlDocument导入到一个DataSet的ReadXml()方法中。之后你便可以将这个DataSet绑定到各类控件中了。XmlNodeReader负责将XML数据从XmlDocument中的某个特定节点中导出来。数据流开始的节点会被输送到XmlNodeReader的构造器中:
[C#]
public XmlNodeReader( XmlNode node ); |
[VB.NET]
Public Sub New( _ ByVal node As XmlNode _ ) |
XmlDocument的根元素(引用自DocumentElement属性)可以被传入XmlNodeReader的构造器中以防整个XmlDocument需要被转化为XML数据流。以下代码说明如何通过XmlNodeReader类来将一个XmlDocument转化为一个DataSet(DataSet中的一个DataTable会被绑定到一个DataGrid服务器控件中):
[C#]
private void Page_Load(object sender, System.EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("Orders.xml")); XmlNodeReader reader = new XmlNodeReader(doc); DataSet ds = new DataSet(); ds.ReadXml(reader); reader.Close(); dg.DataSource = ds.Tables[0].DefaultView; dg.DataBind(); } |
[VB.NET]
Private Sub Page_Load(sender As Object, e _ As System.EventArgs) Dim doc As New XmlDocument() doc.Load(Server.MapPath("Orders.xml")) Dim reader As New XmlNodeReader(doc) Dim ds As New DataSet() ds.ReadXml(reader) reader.Close() dg.DataSource = ds.Tables(0).DefaultView dg.DataBind() End Sub |
虽然前面代码中所显示的XmlDocument对象是手动创建的,但事实上从一个方法中返回的对象是很容易实现绑定的。
将XmlDocument对象转化成DataSet的方法不止一个,但使用XmlNodeReader类会使转化过程更快更高效。
你可以点此浏览将一个XmlDocument绑定到DataGrid的范例程序。
关于作者:
|