using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DataEntityReader { public class EntityDataSourceReader where T : class { private DataSourceViewSelectCallback myDelegate = null; private EntityDataSource _source = null; List dataList = new List(); public EntityDataSourceReader(EntityDataSource source) { myDelegate = new DataSourceViewSelectCallback(AllDone); _source = source; } protected void AllDone(IEnumerable data) { foreach (var v in data) dataList.Add(GetItemObject(v)); } public List GetData() { Control ctl = _source as Control; if (ctl != null) { IDataSource datasrc = ctl as IDataSource; if (datasrc != null) { string viewName = datasrc.GetViewNames().Cast().First(); DataSourceView view = datasrc.GetView(viewName); view.Select(new DataSourceSelectArguments(), myDelegate); return dataList; } } return null; } public static TEntity GetItemObject(object dataItem) where TEntity : class { var entity = dataItem as TEntity; if (entity != null) { return entity; } var td = dataItem as ICustomTypeDescriptor; if (td != null) { return (TEntity)td.GetPropertyOwner(null); } return null; } } }