高分求关于自定义查询控件反射

小D2013 2016-05-12 11:15:59
public partial class UserControlSearch : UserControl
{
object DataSource; //我希望这个查询控件的datasource 是 object 或 ienumrable 类型 ,如果 object 类型对于 以后的反 射太复杂的话 ,定义为 ienumrable 也可以,最好不要再定义其他类型了,例如 为 table 之类的,这样限制太死
public UserControlSearch()
{
InitializeComponent();
}

public void Initialize(object DataSource)
{
this.DataSource = DataSource;
}

private List<string> GetFields() // 这里我希望能通过反射得到 相关字段,例如 如果datasource 实际是 datatable 的话,则应返回列名集合,如果 datasource 实际是 List<someentity> 那么应该返回 someentity 的 字段或属性集合
{
List<string> fieldNames=new List<string>();
Type t = this.DataSource.GetType();
。。。。。。。。。。。
。。。。。。。。。
return fieldNames;
}
}

以上问题 请高手指点
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2016-05-15
  • 打赏
  • 举报
回复
ilist.GetType().GetGenericArguments()[0]; 是下面的这个作用。 List<someentity> 那么应该返回 someentity
足球中国 2016-05-15
  • 打赏
  • 举报
回复

		protected virtual IList GetListSource() {
			if(DataSource == null) return null;
			IListSource ls = DataSource as IListSource;
			if(ls != null) return ls.GetList();
			DataTable table = DataSource as DataTable;
			if(table != null) return table.DefaultView;
			IList list = DataSource as IList;
			return list;
		}
小D2013 2016-05-14
  • 打赏
  • 举报
回复
最好有谁做过类似查询控件,给提供一些好的建议
秋的红果实 2016-05-13
  • 打赏
  • 举报
回复

class BaseClass
{
    protected string Name;
    public virtual string name
    {
        get
        {
            return Name;
        }
        set
        {
            Name = value;
        }
    }
    public int age { set; get; }

}


string outPut = "";
List<BaseClass> bc = new List<BaseClass>();
PropertyInfo[] pi = bc.GetType().GetProperties();
foreach(PropertyInfo p in pi)
{
    outPut += p.Name + "<br />";
}

Response.Write(outPut);

输出的结果是: Capacity Count Item 可以看得出,对于list就不适合这么处理(用GetProperties()) 要不就用接口实现,对于datatable一种实现,对于list是另一种实现……
马少华 2016-05-13
  • 打赏
  • 举报
回复
也做过类似的需求。 数据源还是做成IEnumerable<object> 这种类型的吧。 然后根据需要再设置几个属性 public string Fields1{get;set;} public string Fields2{get;set;} public string Fields3{get;set;} 最后通过Fields1,fields2,fields3来反射数据源。 类似于Combobox 的displaymember,和valuemember
ghao0 2016-05-13
  • 打赏
  • 举报
回复
DataTable如何取Columns应该简单吧, object取属性或字段,上楼已经有示例了.
ghao0 2016-05-13
  • 打赏
  • 举报
回复
private List<string> GetFields() // 这里我希望能通过反射得到 相关字段,例如 如果datasource 实际是 datatable 的话,则应返回列名集合,如果 datasource 实际是 List<someentity> 那么应该返回 someentity 的 字段或属性集合 { List<string> fieldNames=new List<string>(); Type t = this.DataSource.GetType(); if(t is DateTable) { ... } else if (t is ...) { ... } return fieldNames; } }
小D2013 2016-05-12
  • 打赏
  • 举报
回复
版主,我希望这个数据源时比较通用的,反射会得到很多信息,我如何能确定 哪部分信息是实际我想要的字段名集合,这是个难点啊
threenewbee 2016-05-12
  • 打赏
  • 举报
回复
Type t = this.DataSource.GetType(); foreach (var 字段名 in t.GetPropertites()) { 字段名.Name就是你要的。 }

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧