Конференция ".Net" » проблема в DataGridView.DataSource и ListChangedEventArgs [C#, WinXP]
 
  • XentaAbsenta © (08.11.08 10:00) [0]
    Третий день бьюсь со списком (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]
    пришел ответ через века, через года, через столетья...
 
Конференция ".Net" » проблема в DataGridView.DataSource и ListChangedEventArgs [C#, WinXP]
Есть новые Нет новых   [134427   +35][b:0][p:0]