1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
namespace System.Web.UI.WebControls {
using System.Web.UI.WebControls.Expressions;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Security.Permissions;
using System.Web.UI;
using System.Web.Resources;
[TargetControlType(typeof(IQueryableDataSource))]
[NonVisualControl()]
[DefaultProperty("TargetControlID")]
[ToolboxBitmap(typeof(QueryExtender), "QueryExtender.bmp")]
[Designer("System.Web.UI.Design.QueryExtenderDesigner, " + AssemblyRef.SystemWebExtensionsDesign)]
[ParseChildren(true, "Expressions")]
[PersistChildren(false)]
public class QueryExtender : Control {
private QueryExpression _query;
private string _targetControlID;
private IQueryableDataSource _dataSource;
public QueryExtender() {
}
internal QueryExtender(IQueryableDataSource dataSource) {
_dataSource = dataSource;
}
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public virtual IQueryableDataSource DataSource {
get {
if (_dataSource == null) {
if (String.IsNullOrEmpty(TargetControlID)) {
throw new InvalidOperationException(AtlasWeb.DataSourceControlExtender_TargetControlIDMustBeSpecified);
}
_dataSource = DataBoundControlHelper.FindControl(this, TargetControlID) as IQueryableDataSource;
//
if (_dataSource == null) {
throw new InvalidOperationException(
String.Format(CultureInfo.CurrentCulture,
AtlasWeb.QueryExtender_DataSourceMustBeIQueryableDataSource,
TargetControlID));
}
}
return _dataSource;
}
}
[
Category("Behavior"),
ResourceDescription("QueryExtender_Expressions"),
PersistenceMode(PersistenceMode.InnerDefaultProperty),
]
public DataSourceExpressionCollection Expressions {
get {
return Query.Expressions;
}
}
[
Category("Behavior"),
DefaultValue(""),
IDReferenceProperty,
ResourceDescription("ExtenderControl_TargetControlID"),
SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID"),
]
public virtual string TargetControlID {
get {
return _targetControlID ?? String.Empty;
}
set {
if (_targetControlID != value) {
_dataSource = null;
_targetControlID = value;
}
}
}
private QueryExpression Query {
get {
if (_query == null) {
_query = new QueryExpression();
}
return _query;
}
}
[SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers", MessageId = "0#")]
protected internal override void OnInit(EventArgs e) {
if (!DesignMode) {
DataSource.QueryCreated += new EventHandler<QueryCreatedEventArgs>(OnDataSourceQueryCreated);
// Initialize the Query
Query.Initialize(this, Context, DataSource);
}
base.OnInit(e);
}
private void OnDataSourceQueryCreated(object sender, QueryCreatedEventArgs e) {
e.Query = Query.GetQueryable(e.Query);
}
protected override object SaveViewState() {
Pair p = new Pair();
p.First = base.SaveViewState();
p.Second = _query != null ? ((IStateManager)_query.Expressions).SaveViewState() : null;
return p;
}
protected override void LoadViewState(object savedState) {
Pair p = (Pair)savedState;
base.LoadViewState(p.First);
if (p.Second != null) {
((IStateManager)Query.Expressions).LoadViewState(p.Second);
}
}
protected override void TrackViewState() {
base.TrackViewState();
if (_query != null) {
((IStateManager)_query.Expressions).TrackViewState();
}
}
}
}
|