Создание моего собственного компонента с DataSource и DataBind () - PullRequest
0 голосов
/ 11 ноября 2009

Я хочу сделать свой компонент, который работает аналогично большинству элементов управления данными (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 голосов
/ 11 ноября 2009

Вы можете попробовать универсальный метод:

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

Один простой совет по производительности: рассмотрите возможность кэширования экземпляра PropertyInfo вместо повторной генерации при каждом вызове process().

...