Интерфейс

Просмотр 15 сообщений - с 16 по 30 (из 31 всего)
  • Автор
    Сообщения
  • #21296
    Mikhail
    Модератор

    Если плоский класс реализует интерфейс INotifyPropertyChanged, то когда грид меняет в нём данные, в плоском классе будут срабатывать определённые методы или события, на которые можно поставить изменение данных в исходном классе.

    #21297
    manjey73
    Участник

    Проблема заключается в том, что класс представляет из себя List классов (у которых есть вложенные свойства).

    И как в таком случае сделать плоский класс чтобы так же это был список классов ?

    Не предлагайте изменить XML, не я его придумал. А прикручивать всякие INotifer и так далее не хватает знаний, не говоря уже об опыте.

    #21302
    Mikhail
    Модератор

    Основные идеи я уже написал: либо изменять пользовательский интерфейс, либо делать плоский класс-переходник. Реализация за Вами.

    #21304
    manjey73
    Участник

    Так мне в этом и нужна помощь, как сделать плоский класс, который меня устроит не проблема, а вот как сделать список плоских классов относительно списка классов с вложением. И главное как между ними создать связь, чтобы изменения одного изменяло и второй и наоборот. Толковых примеров не нахожу вообще…

    #21310
    Mikhail
    Модератор

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

    #21339
    manjey73
    Участник

    Сделал костыль в виде DataContractSerializer поверх XmlSerializer

    Не понимаю, почему сразу нельзя добавить функционал в XmlSerializer по аналогии, NET то шагает дальше….

    #21340
    Mikhail
    Модератор

    Какая общая идея решения проблемы получилась?

    #21341
    manjey73
    Участник

    Код сериализации, который у меня в ScadaCommFunc настроен на определенные ветки оригинального XML. Оно умеет пропускать те ветки, под которые я не создавал классы.

    DataContractSerializer почему-то валится с ошибками при попытке чтения оригинального xml. Хотя если им сериализовать, то свое он потом десериализует нормально… Не разобрался с этим почему так. И таки он нифига не умеет работать с XML Атрибутами, упорно их делает Элементами.

    В общем я сделал костыль в виде Сериализации с вызовом callback [OnSerialising] c вытягиванием из вложенного класса полей и последующей Десериализацией через MemoryStream. И потом это подсовываю в datagridview.

    Осталось разобраться как редактировать datagridview с редактированием данных класса, добавить фильтрацию и т.д.

    #21344
    manjey73
    Участник

    В общем каменный цветок не срастается. Если прогнать сериализацию и десериализацию через память, то теряется связь bindingsource с классом. Такая вот фигня…

    #21349
    manjey73
    Участник

    По вытягиванию переменных из класса вопрос решил. Собственно при помощи INotifyPropertyChanged но без создания плоского класса, а все в том же.

    Надо теперь разобраться как управлять классом из datagridview — удаление, добавление, вставка, перемещение строк…..

    С интерфейсом я вообще пока не в ладах… даже не понимаю с чего начинать.

    Если есть примеры в коде Scada, было бы неплохо посмотреть…

    #21352
    Mikhail
    Модератор

    С коллекциями объектов DataGridView работает автоматически. Примеры, которые есть, это Администратор и Редактор таблиц.

    #21356
    manjey73
    Участник

    Да не работает он автоматически. Я удаляю строку, делаю запись, а строка никуда не удалилась. Не понимаю, почему, так как вроде связано через BindingSource.
    Где-то кому-то видимо надо сказать, раз в DGV удалил, удали и там.

    Но редактирует исправно, то есть изменение текстового поля работает.

    #21362
    Mikhail
    Модератор

    Но в Редакторе таблиц удаление отлавливается. В качестве BindingSource.DataSource используется List<>

    #21363
    manjey73
    Участник

    Как оказалось не все так просто… как хотелось бы…
    Либо создавать события и все отлавливать и постоянно обновлять DataSource — путь в лоб и много кода, либо…. нашел тут одно решение, но еще не проверял, только разбираюсь.

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

    А покажите где смотреть как отлавливается в Редакторе ?

    • Этот ответ был изменен 2 года, 4 месяца назад от manjey73.
    #21365
    Mikhail
    Модератор
Просмотр 15 сообщений - с 16 по 30 (из 31 всего)
  • Вы должны авторизироваться для ответа в этой теме.