You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,114 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="XmlDataSourceView.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.UI.WebControls {
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing.Design;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Xml;
|
||||
|
||||
|
||||
/// <devdoc>
|
||||
/// </devdoc>
|
||||
public sealed class XmlDataSourceView : DataSourceView {
|
||||
|
||||
private XmlDataSource _owner;
|
||||
|
||||
|
||||
/// <devdoc>
|
||||
/// Creates a new instance of XmlDataSourceView.
|
||||
/// </devdoc>
|
||||
public XmlDataSourceView(XmlDataSource owner, string name) : base(owner, name) {
|
||||
_owner = owner;
|
||||
}
|
||||
|
||||
|
||||
/// <devdoc>
|
||||
/// Returns all the rows of the datasource.
|
||||
/// </devdoc>
|
||||
protected internal override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments) {
|
||||
arguments.RaiseUnsupportedCapabilitiesError(this);
|
||||
|
||||
|
||||
XmlNode root = _owner.GetXmlDocument();
|
||||
|
||||
XmlNodeList nodes = null;
|
||||
if (_owner.XPath.Length != 0) {
|
||||
// If an XPath is specified on the control, use it
|
||||
nodes = root.SelectNodes(_owner.XPath);
|
||||
}
|
||||
else {
|
||||
// Otherwise, get all the children of the root
|
||||
nodes = root.SelectNodes("/node()/node()");
|
||||
}
|
||||
|
||||
return new XmlDataSourceNodeDescriptorEnumeration(nodes);
|
||||
}
|
||||
|
||||
public IEnumerable Select(DataSourceSelectArguments arguments) {
|
||||
return ExecuteSelect(arguments);
|
||||
}
|
||||
|
||||
|
||||
private class XmlDataSourceNodeDescriptorEnumeration : ICollection {
|
||||
private XmlNodeList _nodes;
|
||||
private int _count = -1; // -1 indicates we have not yet calculated the count
|
||||
|
||||
public XmlDataSourceNodeDescriptorEnumeration(XmlNodeList nodes) {
|
||||
Debug.Assert(nodes != null, "Did not expect null node list");
|
||||
_nodes = nodes;
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() {
|
||||
foreach (XmlNode node in _nodes) {
|
||||
if (node.NodeType == XmlNodeType.Element) {
|
||||
yield return new XmlDataSourceNodeDescriptor(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int ICollection.Count {
|
||||
get {
|
||||
if (_count == -1) {
|
||||
// If the count has not yet been set, calculate the element count
|
||||
_count = 0;
|
||||
foreach (XmlNode node in _nodes) {
|
||||
if (node.NodeType == XmlNodeType.Element) {
|
||||
_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return _count;
|
||||
}
|
||||
}
|
||||
|
||||
bool ICollection.IsSynchronized {
|
||||
get {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
object ICollection.SyncRoot {
|
||||
get {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
void ICollection.CopyTo(Array array, int index) {
|
||||
for (IEnumerator e = ((IEnumerable)this).GetEnumerator(); e.MoveNext(); ) {
|
||||
array.SetValue(e.Current, index++);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user