使用DataSource和DataBind()创建自己的组件

时间:2009-11-10 23:01:58

标签: c# .net list user-controls data-binding

我想做一个与大多数数据控件(MS,Telerek等)类似的组件:

myControl.DataSource = new List<myClass>();
mycontrol.NameField  = "Name";
myControl.ValueField = "Value";
myControl.DataBind;

我有一些测试代码:

 class myClass
 {
  public String Name
  {
   get { return _name; }
  }
  ...
 }

 class control
 {
  public void process(object o)
  {
   Type type = o.GetType();
   System.Reflection.PropertyInfo info = type.GetProperty("Name");
   object val = info.GetValue(o,null);
   System.Console.WriteLine(val.ToString());
  }

  public void bind(IEnumerable<object> list)
  {
   foreach (object o in list)
   {
    process(o);
   }
  }
 }

 class Program
 {
  static void Main(string[] args)
  {
   control c = new control();
   List<myClass> data = new List<myClass>();
   data.Add(new myClass("1 name", "first name", 1.0f));
   c.bind(data.Cast<object>());
  }
 }

当然我想摆脱c.bind(data.Cast<object>());。我应该将哪种类型作为参数传递给该函数?我试图传递Object,但是将参数转换回列表存在问题(控制应该是非常通用的,我不希望有任何固定的数据类型)。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用通用方法:

public void bind<T>(IEnumerable<T> list)
{
  foreach (T item in list)
  {
   process(item);
  }
}

一个简单的性能提示:考虑缓存PropertyInfo实例,而不是在每次调用process()时重新生成它。