Стартовая страница › Форумы › Разработка и интеграция › Интерфейс
- В этой теме 30 ответов, 2 участника, последнее обновление 2 года, 4 месяца назад сделано manjey73.
-
АвторСообщения
-
16.11.2021 в 17:39 #21256manjey73Участник
Михаил, подскажите, интерфейс в Администраторе это DataGridView ?
Где смотреть куски кода по добавлению, удалению строк
Выпадающем списке на столбцах, чекбоксы ?В каких библиотеках и места кода, если можно.
17.11.2021 в 14:37 #21257MikhailМодераторДа, DataGridView. Сама редактируемая таблица — DataTable. Код формы. Форма может ссылаться на другие вспомогательные классы, например, ColumnBuilder
17.11.2021 в 14:38 #21258MikhailМодераторЕщё более простое использование DataGridView можно посмотреть в Редакторе таблиц.
18.11.2021 в 21:49 #21269manjey73УчастникУ меня не простое использование 🙁
при десериализации XML у меня получился вложенный класс. Если просто пихать в DataGridView в одном столбце получается класс, а вот как в столбец загнать переменную из вложенного класса не могу найти даже примеров.
Имеется ввиду не через цикл, и при этом чтобы при редактировании это потом опять попадало во вложенный класс и сериализовалось…
19.11.2021 в 15:24 #21276MikhailМодераторНе уверен, что DataGridView так умеет. Можете привести здесь объявление класса?
19.11.2021 в 16:01 #21279manjey73Участник[Serializable] public class PlcProjectInfo { public PlcProjectInfo() { RoutingInfo = new List<AdsInfo>(); //Список Ads, можно наверное обойтись без списка?????? Symbols = new List<Symbol>(); // Список Symbol } public List<AdsInfo> RoutingInfo { get; set; } public List<Symbol> Symbols { get; set; } // это позволяет сделать сериализацию без создания соответствующих групп если они пустые [XmlIgnore] public bool SymbolsSpecified { get { return Symbols.Count != 0; } } } public class AdsInfo { public AdsInfo() { } [XmlElement] public string NetId { get; set; } [XmlElement] public string Port{ get; set; } public AdsInfo(string netid, string port) { NetId = netid; Port = port; } } public class Symbol { public Symbol() { } [XmlIgnore] public string Name1 { get; set; } [XmlElement] public Names Name { get; set; } [XmlElement] public string Signal { get; set; } [XmlElement] public bool Active { get; set; } [XmlElement] public string Type { get; set; } [XmlElement] public string Comment{ get; set; } [XmlElement] public string IGroup { get; set; } [XmlElement] public string IOffset { get; set; } [XmlElement] public string BitSize { get; set; } public Symbol(Names names, string signal, bool active, string type, string comment, string igroup, string ioffset, string bitsize) { Name = names; //Name1 = name; Signal = signal; Active = active; Type = type; Comment = comment; IGroup = igroup; IOffset = ioffset; BitSize = bitsize; } public class Names { public Names() { } public Names(string name, string Static, string constant, string isDefinedInLibrary, string taskprio)//, string name) { Name = name; this.Static = Static; Constant = constant; IsDefinedInLibrary = isDefinedInLibrary; TaskPrio = taskprio; } [XmlAttribute] public string Static { get; set; } [XmlAttribute] public string Constant { get; set; } [XmlAttribute] public string IsDefinedInLibrary { get; set; } [XmlAttribute] public string TaskPrio { get; set; } [XmlText] public string Name { get; set; } } [XmlIgnore] public bool SignalSpecified { get { return Signal != ""; } } public bool ActiveSpecified { get { return Active == true; } } }
19.11.2021 в 16:09 #21280manjey73УчастникМеня собственно интересует Symbol, у меня есть список Symbols из классов Symbol, который имеет вложенный класс Names
dataGridView1.DataSource = devTemplate.Symbols.GetRange(0, devTemplate.Symbols.Count);
Таким образом я вижу в dataGridView все текстовые поля и они редактируются и потом сохраняются. Но один из столбцов представляет из себя весь класс Names, а мне нужны переменные из этого класса в столбцах…
Выглядит это в ячейках столбца так — WinBeckhoffAds.Symbol+NamesПока нашел только что нужно создать дополнительный столбец и скрыть этот с классом.
Каким-то образом связать данные и запихнуть в данный столбец.
Есть в нете упоминания на DataTable и свойство Expression
Еще есть какой-то tableadapter
Но толковых примеров вообще не могу найти, везде примитивы с одним классом и все.в текущем xml у меня 898 строк, если все циклами обрабатывать будет некрасиво и долго….
я могу вытянуть в List нужную переменную, точнее оно вытягивается в IEnumerable и потом ToList(), так как первый не хочет связываться с колонкой. Но как потом все это редактировать, если я строки буду удалять или фильтровать? все циклами проходить? это жесть же….
- Этот ответ был изменен 2 года, 5 месяцев назад от manjey73.
21.11.2021 в 10:31 #21285MikhailМодераторКак отобразить такие данные — можно придумать. Но вот как обеспечить их редактирование?
Возможно, нужно использовать дополнительные PropertyGrid, в которых отображать свойства выбранной строки в DataGridView.21.11.2021 в 10:32 #21286MikhailМодераторЛибо преобразовать всё в DataTable, а в процессе редактирования изменять свойства своих объектов. Примерно так сделано в Администраторе.
21.11.2021 в 10:42 #21287manjey73УчастникBindingSource нужен. В смысле с ним необходимо разобраться, но я никак не могу найти толковых примеров, а собственных мозгов не хватает понять из примитивных примеров как это все делать.
Вообще я удивлен (или возможно таки есть такая возможность) что dataGridView не может развернуть в плоскость вложенный класс.
Если посмотреть на класс Symbol то куда мы поместим Names по расположению, тем столбцом он и окажется. Например он у нас второй и у него 3-и переменных.
Почему datagrid не может показать их так
Столбец1_______Столбец2______Столбец3______Столбец4______Столбец5
пер1_класс1____пер1_класс2___пер2_класс2___пер3_класс2___пер3_класс1Сейчас переменные класса2, которые являются в общем переменной 2 класса 1 отображаются в одном столбце как класс, я могу вытянуть оттуда переменные в список или IEnumerable но как их загнать в столбец текущего datagridview или с ним связать не понимаю. Добавить столбец я могу, это не проблема, а вот сделать связь бьюсь уже не первый день. Знаю, что это возможно, но вот примеров толковых не нахожу.
И может у datagridview вдруг есть какое-то свойство, которое автоматом создаст столбцы для вложенного класса?????, тогда вообще никаких проблем нет как скрыть, так и редактировать ячейки.21.11.2021 в 10:46 #21288manjey73УчастникКак вариант сделать две таблицы, связать данные какого-то столбца одной таблицы с другой, чтобы редактирование первой таблицы приводило к изменению во второй.
И только потом вытягивать в datagridview.В общем пока бьюсь с этой темой, так как она для меня новая…
22.11.2021 в 12:42 #21291MikhailМодератор22.11.2021 в 13:18 #21293manjey73УчастникЭто уже крайняя мера, если не разберусь с более простой вещью, чем INotify, там вообще непонятно как и что делать..
23.11.2021 в 13:52 #21294MikhailМодераторСоздать свой класс даже более подконтрольно, чем копать грид.
23.11.2021 в 14:08 #21295manjey73УчастникТак класс есть актуальный. Хорошо, каким образом происходит копирование данных из одного класса с вложенным в плоский класс и потом обратно ?
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.