Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Чтобы обьект мог быть DataSource


Автор: Хоббит 24.6.2006, 17:47
Какой интерфес должен реализовать обьект, чтобы его можно было скармливать в контролы в качестве DataSource  (в комбобох в датагрид и.т.д.) 

Автор: arilou 24.6.2006, 18:01
IEnumerable (колекции, массивы и проч.) 

Автор: Хоббит 24.6.2006, 18:37
постомрел ... он интерфейс имеет один метод GetEnumerable а что я должен описать в этом методе....?
 smile

Добавлено @ 18:39 
в общем  у меня имеется класс (он представляет собой семейство обьектов.. каждый обьект имеет поля name description b/n/l/) надо чтобы после того как я этот обьект скормлю датагриду в качестве датиасоурца он отобразился в виде таблицы ... то есть колонки есть свойства обьекта(имя описание) а строчки это каждый элемент семейства....
??? 

Автор: Gleb 24.6.2006, 19:10
GetEnumerable() должен возвратить интерфейс IEnumerator, т.е. вам нужно реализовать следующие методы:
Код

public class someClass : IEnumerator, IEnumerable
.....
private int[] someArray;  //к примеру ваш класс инкапсулирует массив
int pos = -1;             //внутренний указатель

public bool MoveNext()
{
//передвинуть внутренний указатель на одну позицию
    if (pos < someArray.Length)
    {
        pos++;
        return true;
    }
    else
        return false;
}
public void Reset()
{
//установить внутренний указатель на начало набора
    pos = 0;
}
public object Current
{
//получить текущий элемент набора
//object Current {get;}
        get {return someArray[pos];}
}
public IEnumerator GetEnumerable()
{
        return (IEnumerator)this;
}
   

Автор: Void 24.6.2006, 21:06
Вообще-то требуется не IEnumerable, а IList или System.ComponentMode.IListSource.. 

Автор: arilou 24.6.2006, 22:06
Корректнее сказать, что 

Цитата

Interfaces Related to Data Binding 

IList interface

A class that implements the IList interface could be an Array, ArrayList, or CollectionBase. These are indexed lists of items of type Object. These lists must contain homogenous types, because the first item of the index determines the type. IList would be available for binding only at run time. 

.......

IEnumerable interface

A class that implements the IEnumerable interface is typically consumed by ASP.NET. Windows Forms support for this interface is only available through the BindingSource component.
 

Автор: Хоббит 25.6.2006, 07:36
Понятно ...но тогда данный обтект может использоваться в качесве списка... так получается заполнить листбоксы комбобоксы и.т.д.

А вот как с дата гридом? Читай вопрос выше? 

Автор: Хоббит 25.6.2006, 09:51
В прниципе такой вопрос можно было бы решить так... когда меняется создать свой обьет наследовать датагрид .. в обработчике изменения датасоурца самостоятельно создать нужные столбцы и их заполнить... вот вопрос тогда такой
как по обьекту получить имена его свойств в виде стринг и как по именам свойсв обьекта обратиться к их значениям .... 
 smile  

Автор: arilou 25.6.2006, 10:45
Цитата(Хоббит @  25.6.2006,  07:36 Найти цитируемый пост)
А вот как с дата гридом? Читай вопрос выше?  

С датагридом точно так же. Главное условие - на колонки грида можно мапить только свойства объектов в списке, не поля.

Цитата(Хоббит @  25.6.2006,  09:51 Найти цитируемый пост)
В прниципе такой вопрос можно было бы решить так... когда меняется создать свой обьет наследовать датагрид .. в обработчике изменения датасоурца самостоятельно создать нужные столбцы и их заполнить... вот вопрос тогда такой
как по обьекту получить имена его свойств в виде стринг и как по именам свойсв обьекта обратиться к их значениям

Че та ты тут намутил-намутил  smile Настраиваешь грид, колонки мапишь на свойства и усе. Reflection тут не нужен.

Или я не понял твой вопрос 

Автор: Хоббит 25.6.2006, 10:58
ладно.. как мапить колонки на свойства .. лопустим есть

Код

class Item
{
  private string name;
  public string Name{get{return name;} set{name = value;}}
  private string description;
  public string Description{get{return description;} set{description = vlue;}}

  public item(){}
}

class ItemCollection : CollectionBase
{
  public ItemCollection(){}
  public void Add(Item newItem)
  {
    List.Add(newItem);
  }
  
  public void Remove(Item oldItem)
  {
    List.Remove(oldItem);
  }
}


теперь надо сделать датагрид передать в него это семейство...
и в нем должно появиться колонки типа name и description и строки типа все элементы семейства 

Автор: Void 25.6.2006, 17:19
Хоббит, осталось только:
Код
ItemCollection items = new ItemCollection();
...
dataGrid.DataSource = items;

smile 

Автор: Хоббит 25.6.2006, 18:04
гы ... тормоз .. я .... ндя ... а думал что то еще там надо .. выкручивать smile гы 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)