Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
ASP .Net
ASP .Net Web Controls
PropertyDescriptor in GetDataSource
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Steven Cheng[MSFT], post: 4299850"] Hi Stech, Does my last reply helps or have you got any furthere ideas on this question? If there're anything else we can help, please feel free to post here. Thanks, Steven Cheng Microsoft Online Support Get Secure! [URL="http://www.microsoft.com/security"]www.microsoft.com/security[/URL] (This posting is provided "AS IS", with no warranties, and confers no rights.) -------------------- | X-Tomcat-ID: 94148144 | References: <DBB81C49-B861-44E8-870A-6B4544E164AA@microsoft.com> | MIME-Version: 1.0 | Content-Type: text/plain | Content-Transfer-Encoding: 7bit | From: [email]stcheng@online.microsoft.com[/email] (Steven Cheng[MSFT]) | Organization: Microsoft | Date: Thu, 21 Jul 2005 05:30:38 GMT | Subject: RE: PropertyDescriptor in GetDataSource | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webcontrols | Message-ID: <svfHgVbjFHA.2700@TK2MSFTNGXA01.phx.gbl> | Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols | Lines: 171 | Path: TK2MSFTNGXA01.phx.gbl | Xref: TK2MSFTNGXA01.phx.gbl microsoft.public.dotnet.framework.aspnet.webcontrols:10015 | NNTP-Posting-Host: tomcatimport2.phx.gbl 10.201.218.182 | | Hi Stech, | | Welcome to ASPNET newsgroup. | As for the PropertyDescriptor related pattern used in most | webcontrol(databound), here are some of my understandings: | | First, the propertyDescriptor is just used to contain information to | represent a certain property in a class and can help to dynamically | retrieve propety values from a runtime class instance(something like | reflection). Well, let's look into the problem through the diassembled code | of ASP.NET DataGrid control's internal "GetResolvedDataSource" method: | | | ====================================== | internal static IEnumerable GetResolvedDataSource(object dataSource, string | dataMember) | { | if (dataSource != null) | { | IListSource source1 = dataSource as IListSource; | if (source1 != null) | { | IList list1 = source1.GetList(); | if (!source1.ContainsListCollection) | { | return list1; | } | if ((list1 != null) && (list1 is ITypedList)) | { | ITypedList list2 = (ITypedList) list1; | PropertyDescriptorCollection collection1 = | list2.GetItemProperties(new PropertyDescriptor[0]); | if ((collection1 == null) || (collection1.Count == | 0)) | { | throw new | HttpException(HttpRuntime.FormatResourceString("ListSource_Without_DataMembe | rs")); | } | PropertyDescriptor descriptor1 = null; | if ((dataMember == null) || (dataMember.Length == | 0)) | { | descriptor1 = collection1[0]; | } | else | { | descriptor1 = collection1.Find(dataMember, | true); | } | if (descriptor1 != null) | { | object obj1 = list1[0]; | object obj2 = descriptor1.GetValue(obj1); | if ((obj2 != null) && (obj2 is IEnumerable)) | { | return (IEnumerable) obj2; | } | } | throw new | HttpException(HttpRuntime.FormatResourceString("ListSource_Missing_DataMembe | r", dataMember)); | } | } | if (dataSource is IEnumerable) | { | return (IEnumerable) dataSource; | } | } | return null; | } | =========================== | | This function first check whether the control's assigned DataSource is an | IListSource object: | If it is not an IListSource, then check whether it is IEnumerable and | return the casted list/enumerable object. | | If it is a IListDataSource, then because some DataSource are not direct | IList or IEnumerable object such as DataSet, so we have to further check | whether it is a IListSource's container or itself a IListSource (using the | ContainsListCollection). If it is a IListSource, we first use GetList() | function to rerieve the IList objects it contains. | | For DataSet, ContainsListCollection will return true. And we convert the | retrieved List to a ITypeList for further use. In fact, the GetList() of | DataSet will return a DataViewManager, then when casting to ITypeList, we | can just the GetItemProperteis to find the proper bindable list/IEnumerable | object in it. You can look it further through the reflector tool. Anyway, | in a simple word, the ITypeList is used to dynamically find bindable list | collection from a List Container( such as dataset). Then, since all these | instances are of abstract type/interface, we need to use reflection to | retrieve that properties, and " PropertyDescriptor" class is just used | to query such information. | | For detailed reference, I suggest you lookup the MSDN reference on all the | involved classes together with the disassemblied code in reflector. That'll | be much helper. | | Thanks, | | Steven Cheng | Microsoft Online Support | | Get Secure! [URL="http://www.microsoft.com/security"]www.microsoft.com/security[/URL] | (This posting is provided "AS IS", with no warranties, and confers no | rights.) | | | | | | -------------------- | | Thread-Topic: PropertyDescriptor in GetDataSource | | thread-index: AcWNQL7jcGIli/TCTHyToe38sgOp9g== | | X-WBNR-Posting-Host: 128.194.92.153 | | From: "=?Utf-8?B?U1RlY2g=?=" <stech@nospam.nospam> | | Subject: PropertyDescriptor in GetDataSource | | Date: Wed, 20 Jul 2005 08:36:07 -0700 | | Lines: 32 | | Message-ID: <DBB81C49-B861-44E8-870A-6B4544E164AA@microsoft.com> | | MIME-Version: 1.0 | | Content-Type: text/plain; | | charset="Utf-8" | | Content-Transfer-Encoding: 7bit | | X-Newsreader: Microsoft CDO for Windows 2000 | | Content-Class: urn:content-classes:message | | Importance: normal | | Priority: normal | | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0 | | Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols | | NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250 | | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGXA03.phx.gbl | | Xref: TK2MSFTNGXA01.phx.gbl | microsoft.public.dotnet.framework.aspnet.webcontrols:10001 | | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webcontrols | | | | I found the following pattern used a lot on webcontrols. Could you please | | explain what the propDescs collection does? What confuses me is this: | | new PropertyDescriptor[0] | | | | Thanks. | | | | <code> | | ITypedList typedMemberList = memberList as ITypedList; | | if (typedMemberList != null) { | | PropertyDescriptorCollection propDescs = | | typedMemberList.GetItemProperties(new PropertyDescriptor[0]); | | PropertyDescriptor memberProperty = null; | | | | if ((propDescs != null) && (propDescs.Count != 0)) { | | string dataMember = DataMember; | | | | if (dataMember.Length == 0) { | | memberProperty = propDescs[0]; | | } | | else { | | memberProperty = propDescs.Find(dataMember, | true); | | } | | | | if (memberProperty != null) { | | object listRow = memberList[0]; | | object list = | memberProperty.GetValue(listRow); | | | | if (list is IEnumerable) { | | return (IEnumerable)list; | | } | | } | | </code> | | | | [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
ASP .Net
ASP .Net Web Controls
PropertyDescriptor in GetDataSource
Top