Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

проблема в DataGridView.DataSource и ListChangedEventArgs [C#, WinXP]


XentaAbsenta ©   (08.11.08 10:00

Третий день бьюсь со списком (IBindingList) в качестве источника данных (DataSource) для DataGridView.
Делаю так:

[c#]

oDataGridView.DataSource = list;

[/c#]

В качестве списка выступает класс

[c#]
public abstract class AbstractDBOCollection : IList,  IBindingList
{}

public abstract class CDBOControllerCollection<TDboController> : AbstractDBOCollection
{}
[/c#]
Элементами списка являются наследники AbstractCollectionEntry

[c#]

public abstract class AbstractCollectionEntry
{
public abstract void SetKeyFields( params CKeyField[] pKeyFields );

public abstract CDBObjectAbstractController GetController();

public abstract void Save();

public abstract string GetDataString();
}
[/c#]

У наследников этого класса есть public свойства, которые и должны выводится в грид.
[b]Проблема заключается в том, что в Grid'е не отображаются эти свойства[/b] При присвоении (oDataGridView.DataSource = list) [b]пустого списка[/b], и последующем его заполнении в гриде рисуются пустые строки. Вызов ивэнта ListChanged (см. ниже) как раз таки и приводит к заполнению грида пустыми строками. Если список до биндинга небыл пустым, то свойства отображаются правильно даже при очистке с последующим перезаполнением списка.

[c#]

listChangedEventArgs = new ListChangedEventArgs( ListChangedType.Reset, -1 );
ListChanged( this, listChangedEventArgs );

[/c#]

Вопрос: что делать?


Медвежонок Пятачок ©   (08.11.08 12:48[1]

Если список до биндинга небыл пустым, то свойства отображаются правильно даже при очистке с последующим перезаполнением списка.

Ну все верно.
Так называемая детачед парадигма.
При биндинге коллекция должна быть непуста.
После биндинга всяческая связь грида и исходного списка пропадает.
Это ж бубльгум. В сысле дотнет.


Медвежонок Пятачок ©   (08.11.08 12:51[2]

если бы связь грида и списка сохранялась бы как в win32 то достаточно было бы вызова oDataGridView.DataSource = list;
И никакого метода бинд вообще бы не потребовалось.


vakarev_dmitri ©   (14.10.10 11:10[3]

для
DevExpress.XtraGrid.GridControl grid;

grid.DataSource = listofitem;
grid.RefreshDataSource();


icelex ©   (14.10.10 22:39[4]

пришел ответ через века, через года, через столетья...


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо