annotate Source/Web/UI/Design/WebObjectBinderDesigner.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Web.UI.Design;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Security.Permissions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 namespace BLToolkit.Web.UI.Design
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.UnmanagedCode)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 class WebObjectBinderDesigner : DataSourceDesigner
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 private DesignerDataSourceView _view;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 private WebObjectBinder _component;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public override string[] GetViewNames()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 return new string[] { "DefaultView" };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public override DesignerDataSourceView GetView(string viewName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 if (string.IsNullOrEmpty(viewName))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 viewName = "DefaultView";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 if (viewName != "DefaultView")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 if (_view == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 _view = new ObjectDesignerDataSourceView(this, viewName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 return _view;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public override void Initialize(IComponent component)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 _component = (WebObjectBinder)component;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 base.Initialize(component);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public override bool CanConfigure
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 get { return true; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 public override void Configure()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 #region ObjectDesignerDataSourceView
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 class ObjectDesignerDataSourceView : DesignerDataSourceView
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public ObjectDesignerDataSourceView(WebObjectBinderDesigner owner, string viewName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 : base(owner, viewName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 _owner = owner;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 private readonly WebObjectBinderDesigner _owner;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 public override IDataSourceViewSchema Schema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 get { return new ObjectViewSchema(_owner); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public override bool CanDelete { get { return _owner._component._objectBinder.AllowRemove; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public override bool CanInsert { get { return _owner._component._objectBinder.AllowNew; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public override bool CanUpdate { get { return _owner._component._objectBinder.AllowEdit; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 public override bool CanPage { get { return true; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 public override bool CanSort { get { return true; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public override bool CanRetrieveTotalRowCount { get { return true; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 class ObjectViewSchema : IDataSourceViewSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public ObjectViewSchema(WebObjectBinderDesigner owner)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 _owner = owner;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 private readonly WebObjectBinderDesigner _owner;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 public IDataSourceViewSchema[] GetChildren()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public IDataSourceFieldSchema[] GetFields()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 PropertyDescriptorCollection fields =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 ((ITypedList)_owner._component._objectBinder).GetItemProperties(null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 IDataSourceFieldSchema[] schema = new IDataSourceFieldSchema[fields.Count];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 for (int i = 0; i < schema.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 schema[i] = new ObjectFieldSchema(fields[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 return schema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 public string Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 Type type = _owner._component._objectBinder.ItemType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 return type != null? type.Name: string.Empty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 class ObjectFieldSchema : IDataSourceFieldSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 public ObjectFieldSchema(PropertyDescriptor propertyDescriptor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 _propertyDescriptor = propertyDescriptor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 DataObjectFieldAttribute attr =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 (DataObjectFieldAttribute)_propertyDescriptor.Attributes[typeof(DataObjectFieldAttribute)];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 if (attr != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 _length = attr.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 _primaryKey = attr.PrimaryKey;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 _isIdentity = attr.IsIdentity;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 _isNullable = attr.IsNullable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 private readonly PropertyDescriptor _propertyDescriptor;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 private readonly int _length = -1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 private readonly bool _isIdentity;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 private readonly bool _isNullable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 private readonly bool _primaryKey;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 public Type DataType { get { return _propertyDescriptor.PropertyType; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 public bool Identity { get { return _isIdentity; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public bool IsReadOnly { get { return _propertyDescriptor.IsReadOnly; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 public bool IsUnique { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 public int Length { get { return _length; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 public string Name { get { return _propertyDescriptor.Name; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 public int Precision { get { return -1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 public bool PrimaryKey { get { return _primaryKey; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 public int Scale { get { return -1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public bool Nullable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 Type type = _propertyDescriptor.PropertyType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Type underlyingType = System.Nullable.GetUnderlyingType(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 return underlyingType != null? true: _isNullable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }