e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
101 lines
3.2 KiB
C#
101 lines
3.2 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="XPathNodeViewPropertyDescriptor.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
// <owner current="true" primary="true">derekdb</owner>
|
|
//------------------------------------------------------------------------------
|
|
#if ENABLEDATABINDING
|
|
using System;
|
|
using System.Xml;
|
|
using System.Xml.XPath;
|
|
using System.Xml.Schema;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
|
|
namespace System.Xml.XPath.DataBinding
|
|
{
|
|
internal class XPathNodeViewPropertyDescriptor : PropertyDescriptor {
|
|
Shape rowShape;
|
|
Shape colShape;
|
|
int colIndex;
|
|
|
|
internal XPathNodeViewPropertyDescriptor(Shape rowShape)
|
|
: base( rowShape.Name, null) {
|
|
this.rowShape = rowShape;
|
|
this.colShape = rowShape;
|
|
this.colIndex = 0;
|
|
}
|
|
|
|
internal XPathNodeViewPropertyDescriptor(Shape rowShape, Shape colShape, int colIndex)
|
|
: base( colShape.Name, null) {
|
|
this.rowShape = rowShape;
|
|
this.colShape = colShape;
|
|
this.colIndex = colIndex;
|
|
}
|
|
|
|
public Shape Shape {
|
|
get { return colShape; }
|
|
}
|
|
|
|
public override Type ComponentType {
|
|
get { return null; }
|
|
}
|
|
|
|
public override string Name {
|
|
get { return this.colShape.Name; }
|
|
}
|
|
|
|
public override bool IsReadOnly {
|
|
get { return true; }
|
|
}
|
|
|
|
public override Type PropertyType {
|
|
get {
|
|
return this.colShape.IsNestedTable
|
|
? typeof(XPathDocumentView)
|
|
: typeof(string);
|
|
}
|
|
}
|
|
|
|
public override bool CanResetValue(object o) {
|
|
return false;
|
|
}
|
|
|
|
public override object GetValue(object o) {
|
|
if (null == o)
|
|
throw new ArgumentNullException("XPathNodeViewPropertyDescriptor.GetValue");
|
|
XPathNodeView xiv = (XPathNodeView)o;
|
|
if (xiv.Collection.RowShape != this.rowShape)
|
|
throw new ArgumentException("XPathNodeViewPropertyDescriptor.GetValue");
|
|
object val = xiv.Column(this.colIndex);
|
|
XPathNode nd = val as XPathNode;
|
|
if (null != nd) {
|
|
XPathDocumentNavigator nav = new XPathDocumentNavigator(nd, null);
|
|
XmlSchemaType xst = nd.SchemaType;
|
|
XmlSchemaComplexType xsct = xst as XmlSchemaComplexType;
|
|
if (null == xst || ( (null != xsct) && xsct.IsMixed) ) {
|
|
return nav.InnerXml;
|
|
}
|
|
else {
|
|
return nav.TypedValue;
|
|
}
|
|
}
|
|
return val;
|
|
}
|
|
|
|
public override void ResetValue(object o) {
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override void SetValue(object o, object value) {
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public override bool ShouldSerializeValue(object o) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
#endif |