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