2001-12-18 Gaurav Vaish <gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.Utils / DataSourceHelper.cs
1 /**\r
2  * Namespace: System.Web.UI.Utils\r
3  * Class:     DataSourceHelper\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
8  * Status:  10%\r
9  *\r
10  * (C) Gaurav Vaish (2001)\r
11  */\r
12 \r
13 using System;\r
14 using System.Collections;\r
15 using System.ComponentModel;\r
16 \r
17 namespace System.Web.Utils\r
18 {\r
19         internal class DataSourceHelper\r
20         {\r
21                 public static IEnumerable GetResolvedDataSource(object source, string member)\r
22                 {\r
23                         if(source==null)\r
24                                 return null;\r
25                         if(source is IListSource)\r
26                         {\r
27                                 IListSource ils = (IListSource)source;\r
28                                 IList       il  = ils.GetList();\r
29                                 if(ils.ContainsListCollection)\r
30                                 {\r
31                                         return il;\r
32                                 }\r
33                                 if(il is ITypedList)\r
34                                 {\r
35                                         ITypedList itl = (ITypedList)il;\r
36                                         PropertyDescriptorCollection pdc = itl.GetItemProperties(new PropertyDescriptor[0]);\r
37                                         PropertyDescriptor pd = null;\r
38                                         if(pdc != null)\r
39                                         {\r
40                                                 if(pdc.Count > 0)\r
41                                                 {\r
42                                                         if(member != null)\r
43                                                         {\r
44                                                                 if(member.Length > 0)\r
45                                                                 {\r
46                                                                         pd = pdc.Find(member, true);\r
47                                                                 } else\r
48                                                                 {\r
49                                                                         pd = pdc[0];\r
50                                                                 }\r
51                                                         }\r
52                                                 }\r
53                                         }\r
54                                         if(pd!=null)\r
55                                         {\r
56                                                 object o = pd.GetValue(il[0]);\r
57                                                 if(o!=null)\r
58                                                 {\r
59                                                         if(o is IEnumerable)\r
60                                                                 return (IEnumerable)o;\r
61                                                 }\r
62                                                 throw new HttpException("ListSource Empty"); // no data in ListSource object\r
63                                         }\r
64                                 }\r
65                         } else if(source is IEnumerable)\r
66                         {\r
67                                 return (IEnumerable)source;\r
68                         }\r
69                         return null;\r
70                 }\r
71         }\r
72 }\r