问题描述
publicpartialclassUserControlSearch:UserControl{objectDataSource;//我希望这个查询控件的datasource是object或ienumrable类型,如果object类型对于以后的反射太复杂的话,定义为ienumrable也可以,最好不要再定义其他类型了,例如为table之类的,这样限制太死publicUserControlSearch(){InitializeComponent();}publicvoidInitialize(objectDataSource){this.DataSource=DataSource;}privateList<string>GetFields()//这里我希望能通过反射得到相关字段,例如如果datasource实际是datatable的话,则应返回列名集合,如果datasource实际是List<someentity>那么应该返回someentity的字段或属性集合{List<string>fieldNames=newList<string>();Typet=this.DataSource.GetType();。。。。。。。。。。。。。。。。。。。。returnfieldNames;}}以上问题请高手指点
解决方案
解决方案二:
Typet=this.DataSource.GetType();foreach(var字段名int.GetPropertites()){字段名.Name就是你要的。}
解决方案三:
版主,我希望这个数据源时比较通用的,反射会得到很多信息,我如何能确定哪部分信息是实际我想要的字段名集合,这是个难点啊
解决方案四:
classBaseClass{protectedstringName;publicvirtualstringname{get{returnName;}set{Name=value;}}publicintage{set;get;}}stringoutPut="";List<BaseClass>bc=newList<BaseClass>();PropertyInfo[]pi=bc.GetType().GetProperties();foreach(PropertyInfopinpi){outPut+=p.Name+"<br/>";}Response.Write(outPut);
输出的结果是:CapacityCountItem可以看得出,对于list就不适合这么处理(用GetProperties())要不就用接口实现,对于datatable一种实现,对于list是另一种实现……
解决方案五:
也做过类似的需求。数据源还是做成IEnumerable<object>这种类型的吧。然后根据需要再设置几个属性publicstringFields1{get;set;}publicstringFields2{get;set;}publicstringFields3{get;set;}最后通过Fields1,fields2,fields3来反射数据源。类似于Combobox的displaymember,和valuemember
解决方案六:
privateList<string>GetFields()//这里我希望能通过反射得到相关字段,例如如果datasource实际是datatable的话,则应返回列名集合,如果datasource实际是List<someentity>那么应该返回someentity的字段或属性集合{List<string>fieldNames=newList<string>();Typet=this.DataSource.GetType();if(tisDateTable){...}elseif(tis...){...}returnfieldNames;}}
解决方案七:
DataTable如何取Columns应该简单吧,object取属性或字段,上楼已经有示例了.
解决方案八:
最好有谁做过类似查询控件,给提供一些好的建议
解决方案九:
protectedvirtualIListGetListSource(){if(DataSource==null)returnnull;IListSourcels=DataSourceasIListSource;if(ls!=null)returnls.GetList();DataTabletable=DataSourceasDataTable;if(table!=null)returntable.DefaultView;IListlist=DataSourceasIList;returnlist;}
解决方案十:
ilist.GetType().GetGenericArguments()[0];是下面的这个作用。List<someentity>那么应该返回someentity