powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Типа, многомерная таблица. На основе чего ее лучше делать?
53 сообщений из 53, показаны все 3 страниц
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319180
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то на форуме подобный вопрос, но он касался внутренней архитектуры

Хочу сделать объект для отображения подобн ой таблицы

Фамилия имя отчество куча столбцов книги песни постановки ещё пара подобных столбцовИванов Пётр Алексеевич ... Петр-первый \n Обоз \n Сранья как любил тебя \n с днюхой вышел я из тюряги \n любовь-ромашка ...

Источником данных является MDTable (типа, Multi Dim - сам придумал и сделал). В ней ячейки содержат либо текст, либо дочернюю таблицу, в которой ячейки содержа либо текст, либ.. (рекурсия)


Все клетки - TextBlock,
Но при выделении строки она становится редактируемой - в ней все клетки представлены объектами TextBox, Datepicker, ComboBox и даже кнопки (мелкая, с крестиком - для удаления текущей строки) - юзер может редактировать, удалять, добавлять записи.

У меня 2 варианта решения:

>> На основе DataGrid. Объединение строк путем добавления дочерних таблиц(жуть, все столбцы будут независимыми в таких дочерних таблицах)
>> На основе Grid (проблема с добавлением строк в середину, проблема разницы кол-ва дочерних строк в разных столбцах)

P.s.,не говорите, будто жуткий интерфейс,
Во-первых, там всего таблица 5х5
Во-вторых OLAP (кто не знает олап, можете сводные таблицы в эксель вспомнить) всегда ровно именно в таких таблицах отображается и это самый удобный вариант из всего возможных.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319182
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
List<T>
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319205
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется речь идет о WРF?
если да, то DataGrid конечно вариант на много лучше. + там есть вертикальная и гори3онтальная виртуали3ация
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319218
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточню. Хочу, чтобы таблица на несколько строк выглядела так
Я могу, конечно, внутрь одной ячейки пихать дочерние гриды, но как сделать так, чтобы строки в соседних ячейках коррелировали между собой - пока не придумал.
Если есть соображения, рад услышать
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319236
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandУточню. Хочу, чтобы таблица на несколько строк выглядела так
Я могу, конечно, внутрь одной ячейки пихать дочерние гриды, но как сделать так, чтобы строки в соседних ячейках коррелировали между собой - пока не придумал.
Если есть соображения, рад услышать
виртуали3ация важна? особенно по горизонтали?
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319238
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так же какого типа выделение вам нужно в этом гриде? бе3 выделения, построчно, по блочно (то есть блок и все подстроки) или построчно, по ячейкам.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319244
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesвиртуали3ация важна? особенно по горизонтали?
Честно говоря, даж не очень понимаю, что подразумевается под этим словом.
Грид нужен только для отображения данных. Если пользователь что-то внесёт, то эти данные напрямую отправляются в мой MDTable.

Roman Mejtesа так же какого типа выделение вам нужно в этом гриде? бе3 выделения, построчно, по блочно (то есть блок и все подстроки) или построчно, по ячейкам.
Выделение - только текущая ячейка.

Добавление новой строки я себе представляю так:
Щёлкаешь, например, по "физруку". И под ним появляются ещё ячейки с зауженной высотой - как знак, что туда можно что-то добавить. Наверно, так.
Может, в виде кнопки.. Например, это не пустые ячейки, а большая кнопочка.
Пока бы с отображением справиться))) А добавление - уже пустяк.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319247
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

Представленное на картинке представление стандартными средствами не реализуется. Только свой компонент грида с нуля писать. Задача трудоемкая. Может подумаете, как это представит иначе?
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319251
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вижу 2 пути:

- ItemsControl
- Grid (ColumnHeader)
- ScrollViewer
- VirtualizationStackРanel
- ItemsControl
- Grid
- Cell
- Cell
- Cell
- Cell

В качестве Grid'а можно исполь3овать и свою панель, в которой параметры можно будет Binding'ить. (то есть ра3меры привя3ать к существующим свойствам контрола, либо можно исполь3овать GridSizeSharing, чтоб параметры гридов совпадали.
Ну и в Cell надо будет определить всё поведение при выделении и настроить пере
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319253
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вижу 3 пути:
Путь номер 1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
- ItemsControl
	- Grid (ColumnHeader)
	- ScrollViewer
        - VirtualizationStackРanel 
			- ItemsControl
				- Grid
					- Cell
					- Cell
					- Cell
					- Cell

В качестве Grid'а можно исполь3овать и свою панель, в которой параметры можно будет Binding'ить. (то есть ра3меры привя3ать к существующим свойствам контрола, либо можно исполь3овать GridSizeSharing, чтоб параметры гридов совпадали.
Ну и в Cell надо будет определить всё поведение при выделении и настроить переxоды фокуса ячеек.
Работы довольно много.

Путь номер 2:
Делать на ба3е 1 ItemsControl'а, в качестве элементов будут сра3у ячейка, в параметраx который будет сра3у определено иx положение в таблице, а в качестве панели будет выступать своя панель или Grid который будет прокручиваться в ScrollView, такое тоже довольно сложно сделать и не будет работать виртуали3ация.
Для этого метода надо будет еще делать свой CollectionView или какой то Wraррer

Путь номер 3:
Исполь3овать FlowDocument

Путь номер 4:
Рендерить и обрабатывать всё самому

Дла того, чтоб сделать такое нужно xорошо ра3бираться как работает:
ItemsControl и его потомки,
ItemContainerGenerator,
VirtualizingStackPanel,
Рanel (Measure, Arrage, Render),
ICollectionView
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319273
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCharles Weyland,

Представленное на картинке представление стандартными средствами не реализуется. Только свой компонент грида с нуля писать. Задача трудоемкая. Может подумаете, как это представит иначе?
Не, я всё обдумал. Да, подобного компонента нет и задача действитетельно трудоёмкая. Поэтому решил спросить мнения форумчан.
Создание собственного компонента для меня задача не новая. Для winforms я уже создал на базе picturebox компонент datagrid, отображающий OLAP куб. Я прямо сурово линиями и "пеинтил".
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319282
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandhVosttCharles Weyland,

Представленное на картинке представление стандартными средствами не реализуется. Только свой компонент грида с нуля писать. Задача трудоемкая. Может подумаете, как это представит иначе?
Не, я всё обдумал. Да, подобного компонента нет и задача действитетельно трудоёмкая. Поэтому решил спросить мнения форумчан.
Создание собственного компонента для меня задача не новая. Для winforms я уже создал на базе picturebox компонент datagrid, отображающий OLAP куб. Я прямо сурово линиями и "пеинтил".
ну вот WРF по сути тоже самое только графике рендерная. Можно просто сделать Control, нафигачить Visual об_ектов (тверд. 3нак не работает) в этом контроле, чтоб не рендерить одно и тоже постоянно. Всё будет само рисоваться. Геометрия тут простая. Но это самый трудоемкий путь, много всего надо продумывать и делать прокрутку и т.д. Тогда как на ItemsControl'е можно сделать 3а счет шаблонов и генератора. Но и тут масса подводныx камней.
Но 1ый способ самый прои3водительный, а во втором доступны DataTemрlate'ы, что так же очень удобно.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319284
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandhVosttCharles Weyland,

Представленное на картинке представление стандартными средствами не реализуется. Только свой компонент грида с нуля писать. Задача трудоемкая. Может подумаете, как это представит иначе?
Не, я всё обдумал. Да, подобного компонента нет и задача действитетельно трудоёмкая. Поэтому решил спросить мнения форумчан.
Создание собственного компонента для меня задача не новая. Для winforms я уже создал на базе picturebox компонент datagrid, отображающий OLAP куб. Я прямо сурово линиями и "пеинтил".

Лучше уж взять HTML, трудоёмкость на пару порядков меньше, для реализации подобного, решается довольно легко.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319294
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCharles Weylandпропущено...

Не, я всё обдумал. Да, подобного компонента нет и задача действитетельно трудоёмкая. Поэтому решил спросить мнения форумчан.
Создание собственного компонента для меня задача не новая. Для winforms я уже создал на базе picturebox компонент datagrid, отображающий OLAP куб. Я прямо сурово линиями и "пеинтил".

Лучше уж взять HTML, трудоёмкость на пару порядков меньше, для реализации подобного, решается довольно легко.

FlowDocument, внутри таблицы можно ра3местить UI элементы.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319319
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только сейчас появилась возможность проанализировать ваши ответы и советы.

Roman Mejtesвсё поведение при выделении и настроить пере
что-то там явно не дописано...
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319320
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, дописано.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319365
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandP.s.,не говорите, будто жуткий интерфейс,
Во-первых, там всего таблица 5х5
Во-вторых OLAP (кто не знает олап, можете сводные таблицы в эксель вспомнить) всегда ровно именно в таких таблицах отображается и это самый удобный вариант из всего возможных.
Да мы помним, что Вы пишете на халяву для какой-то одной школы. Вернее даже для одного человека.
Что типа дадите, тому он и рад будет :)

Вспомнилась "Психбольница в руках пациентов" :)
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319415
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто типа дадите, тому он и рад будет :)
Я и сюда выложу. Либо компонент, либо целиком программа может быть кому-то интересна.

В общем-то, я её пишу больше с целью ознакомиться с WPF по-человечески и чтобы в этой сфере у меня был небольшой, но законченный проект.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319563
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandЯ и сюда выложу. Либо компонент, либо целиком программа может быть кому-то интересна.

В общем-то, я её пишу больше с целью ознакомиться с WPF по-человечески и чтобы в этой сфере у меня был небольшой, но законченный проект.

Фармить опыт лучше в направлении того, чем реально пользуются люди. Придумать можно много чего, да что угодно вообще, но истинный путь — это отказываться от лишнего и выкидывать бредовые идеи, оставлять максимально простые и максимально эффективные. В этом и есть опыт, быстрее находить компромиссы, а не любой ценой, правдой и неправдой, до последнего пытаться вкорячить кривой нестандартный интерфейс, который уже заведомо по десятку причин, обречён.

Т.е. опыта поднять на таких вещах не получится, а вот потерять время — это да. Чем занимался последние несколько месяцев? Нннуу... пеинтил, понимаешь, нестандартный грид, у которого по сути нет строк (у каждой колонки они сугубо свои) — зачем?

Вспомнилось что-то про троллейбус из буханки...
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319644
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНннуу... пеинтил, понимаешь, нестандартный грид
А вот это я не по собственной воле делал. Во-первых, напеинтил я за 3 или 4 рабочих дня, а во-вторых, нормального, удовлетворяющего пользователя грида не было. Это был коммерческий проект. На работе делал.


hVosttФармить опыт лучше в направлении того, чем реально пользуются люди
Вы меня неправильно поняли.
Если бы меня это тяготило, я б не делал. Я увлечён программированием и хочется хорошему человеку сделать приятно. И мне приятно будет, если где-то моя программулина пригодилась.
Поэтому в любом случае при любом раскладе я этот грид добью)
Это всё равно, что человеку, играющему в танчики, говорить, что его танк 70 левел никому, кроме его и его товарища не интересен. Да он и не спорит. Всё равно хочет танк 70 левел.

А участникам форума, которые погрузились в вопрос и поделились советами - выражаю огромную благодарность))
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319976
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandskyANAЧто типа дадите, тому он и рад будет :)
Я и сюда выложу. Либо компонент, либо целиком программа может быть кому-то интересна.

В общем-то, я её пишу больше с целью ознакомиться с WPF по-человечески и чтобы в этой сфере у меня был небольшой, но законченный проект.
Всё же, ознакомление с WPF начинать лучше не сразу с создания кастомных замудрёных компонентов, а с использования стандартынх и этого модного MVVM. Ознакомление с WPF - это в первую очередь компоновка, стилизация и шаблонизация данных с байндингами. Потом уже визуальная шаблонизация и полноценные кастомные компоненты.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319977
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, Хвост прав.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319979
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandhVosttНннуу... пеинтил, понимаешь, нестандартный грид
А вот это я не по собственной воле делал. Во-первых, напеинтил я за 3 или 4 рабочих дня, а во-вторых, нормального, удовлетворяющего пользователя грида не было. Это был коммерческий проект. На работе делал.


hVosttФармить опыт лучше в направлении того, чем реально пользуются люди
Вы меня неправильно поняли.
Если бы меня это тяготило, я б не делал. Я увлечён программированием и хочется хорошему человеку сделать приятно. И мне приятно будет, если где-то моя программулина пригодилась.
Поэтому в любом случае при любом раскладе я этот грид добью)
Это всё равно, что человеку, играющему в танчики, говорить, что его танк 70 левел никому, кроме его и его товарища не интересен. Да он и не спорит. Всё равно хочет танк 70 левел.

А участникам форума, которые погрузились в вопрос и поделились советами - выражаю огромную благодарность))
Если понадобится совсем кастомный контрол, и шаблонизации данных и представления не хватит, то вам всё равно лучше начать с азов, с байндингов и компоновки. Всё равно придётся в кастомном компоненте прописывать байндинги через прикрепляемые свойства и свойства зависимостей (т. е. и эту тему со свойствами тоже поднять придётся, т. к. это не совсем те свойства, что в обычном ООП применяются).

Кстати, могу поделиться кодом, который позволяет удобно и быстро задавать размеры строк и столбцов в Grid (не DataGrid) в смешанном стиле (через числа, звёздочки, auto и дефолтное значение, аналогичное stretch "растянуть до краёв контейнера"):

Код: xml
1.
2.
3.
<Grid
    gh:GridHelpers.RowsHeightFormat="auto,200,2*,,,50,auto"
    gh:GridHelpers.ColumnsWidthFormat="12*,11*,20*">



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
public class GridHelpers
{
    // This class used the combination of approaches presented in https://rachel53461.wordpress.com/2011/09/17/wpf-grids-rowcolumn-count-properties/
    // and in http://samondotnet.blogspot.ru/2012/03/wpf-grid-layout-simplified-using-rows.html .
    // I decide to drop out the properties that aren't needed for me - StarRows and StarColumns from the first link and Cell from the second one.
    // I introduced a new more generic properties RowsHeightFormat and ColumnsWidthFormat 
    // that allow to set up widths and heights with mixed styles (through numbers, asterisks, "auto" word, and default value) simultaneously.



    #region RowCount property

    /// <summary>
    /// Adds the specified number of rows to RowDefinitions. 
    /// Row's height has its default value like when you add a row like this: <![CDATA[<RowDefinition />]]>.
    /// </summary>
    public static readonly DependencyProperty RowCountProperty =
        DependencyProperty.RegisterAttached(
            "RowCount",
            typeof(int),
            typeof(GridHelpers),
            new PropertyMetadata(-1, RowCountChanged));

    public static int GetRowCount(DependencyObject target)
    {
        return (int)target.GetValue(RowCountProperty);
    }

    public static void SetRowCount(DependencyObject target, int value)
    {
        target.SetValue(RowCountProperty, value);
    }

    /// <summary>
    /// Adds rows.
    /// </summary>
    /// <param name="target"></param>
    /// <param name="e"></param>
    public static void RowCountChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        if (!(target is Grid) || (int)e.NewValue < 0)
            return;

        Grid grid = (Grid)target;

        grid.RowDefinitions.Clear();

        for (int i = 0; i < (int)e.NewValue; i++)
        {
            grid.RowDefinitions.Add(new RowDefinition());
        }
    }

    #endregion RowCount property

    #region ColumnCount property

    /// <summary>
    /// Adds the specified number of columns to ColumnDefinitions. 
    /// Column's width has its default value like when you add a column like this: <![CDATA[<ColumnDefinition />]]>.
    /// </summary>
    public static readonly DependencyProperty ColumnCountProperty =
        DependencyProperty.RegisterAttached(
            "ColumnCount",
            typeof(int),
            typeof(GridHelpers),
            new PropertyMetadata(-1, ColumnCountChanged));

    public static int GetColumnCount(DependencyObject target)
    {
        return (int)target.GetValue(ColumnCountProperty);
    }

    public static void SetColumnCount(DependencyObject target, int value)
    {
        target.SetValue(ColumnCountProperty, value);
    }

    /// <summary>
    /// Adds columns.
    /// </summary>
    /// <param name="target"></param>
    /// <param name="e"></param>
    public static void ColumnCountChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        if (!(target is Grid) || (int)e.NewValue < 0)
            return;

        Grid grid = (Grid)target;

        grid.ColumnDefinitions.Clear();

        for (int i = 0; i < (int)e.NewValue; i++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
        }
    }

    #endregion ColumnCount property

    #region RowsHeightFormat property

    /// <summary>
    /// Sets the Height property for rows of the grid.
    /// </summary>
    public static readonly DependencyProperty RowsHeightFormatProperty =
        DependencyProperty.RegisterAttached(
            "RowsHeightFormat",
            typeof(string),
            typeof(GridHelpers),
            new PropertyMetadata(string.Empty, RowsHeightFormatChanged));

    public static string GetRowsHeightFormat(DependencyObject target)
    {
        return (string)target.GetValue(RowsHeightFormatProperty);
    }

    public static void SetRowsHeightFormat(DependencyObject target, string value)
    {
        target.SetValue(RowsHeightFormatProperty, value);
    }

    public static void RowsHeightFormatChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        if (!(target is Grid) || string.IsNullOrEmpty(e.NewValue.ToString()))
            return;

        var grid = (Grid)target;
        var oldValue = e.OldValue as string;
        var newValue = e.NewValue as string;

        if (oldValue == null || newValue == null)
            return;

        if (oldValue != newValue)
        {
            grid.RowDefinitions.Clear();

            newValue
                .Split(new[] { ',' }, StringSplitOptions.None)
                .Select(ParseGridLength)
                .Select(gridLength =>
                {
                    if (gridLength.HasValue)
                        return new RowDefinition { Height = gridLength.Value };
                    else
                        return new RowDefinition();
                })
                .ToList()
                .ForEach(grid.RowDefinitions.Add);
        }
    }

    #endregion RowsHeightFormat property

    #region ColumnsWidthFormat property

    /// <summary>
    /// Sets the Width property for columns of the grid.
    /// </summary>
    public static readonly DependencyProperty ColumnsWidthFormatProperty =
        DependencyProperty.RegisterAttached(
            "ColumnsWidthFormat",
            typeof(string),
            typeof(GridHelpers),
            new PropertyMetadata(string.Empty, ColumnsWidthFormatChanged));

    public static string GetColumnsWidthFormat(DependencyObject target)
    {
        return (string)target.GetValue(ColumnsWidthFormatProperty);
    }

    public static void SetColumnsWidthFormat(DependencyObject target, string value)
    {
        target.SetValue(ColumnsWidthFormatProperty, value);
    }

    public static void ColumnsWidthFormatChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        if (!(target is Grid) || string.IsNullOrEmpty(e.NewValue.ToString()))
            return;

        var grid = (Grid)target;
        var oldValue = e.OldValue as string;
        var newValue = e.NewValue as string;

        if (oldValue == null || newValue == null)
            return;

        if (oldValue != newValue)
        {
            grid.ColumnDefinitions.Clear();

            newValue
                .Split(new[] { ',' }, StringSplitOptions.None)
                .Select(ParseGridLength)
                .Select(gridLength =>
                {
                    if (gridLength.HasValue)
                        return new ColumnDefinition { Width = gridLength.Value };
                    else
                        return new ColumnDefinition();
                })
                .ToList()
                .ForEach(grid.ColumnDefinitions.Add);
        }
    }

    #endregion ColumnsLengthFormat property


    private static GridLength? ParseGridLength(string text)
    {
        text = text.Trim();

        // "Auto" grid length.
        if (text.ToLower() == "auto")
        {
            return GridLength.Auto;
        }

        // Proportional grid length set by asterisk.
        else if (text.Contains("*"))
        {
            double starNumber;

            // If there is only single "*" without a number then this is equivalent to "1*".
            if (text.Length == 1)
                starNumber = 1;
            else
                starNumber = double.Parse(text.Substring(0, text.IndexOf('*')), CultureInfo.InvariantCulture);

            return new GridLength(starNumber, GridUnitType.Star);
        }

        // This leaves the length for row or column with default value - when you set it in XAML like this: 
        // <RowDefinition /> or <ColumnDefinition /> - without defining the length actually.
        else if (String.IsNullOrEmpty(text))
            return null;

        // Grid length set by pixels.
        else
        {
            var pixelsCount = double.Parse(text, CultureInfo.InvariantCulture);
            return new GridLength(pixelsCount, GridUnitType.Pixel);
        }
    }
}

...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39319981
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если намешивать звёздочки и другие задания размера, то звёздочки будут делить только остаток свободного места от всех остальных размеров. Т. е. если всего доступно, например, ширины 500 единиц, а задано "450, 8*, 2*", то звёздочки разделят 500-450=50 единиц ширины в отношении 40 к 10.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320012
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandВо-первых, напеинтил я за 3 или 4 рабочих дня

Ну да, ну да... Это из разряда «..и 8 шапок сошьём..».
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320014
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЛучше уж взять HTML, трудоёмкость на пару порядков меньше, для реализации подобного, решается довольно легко.Excel
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320038
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttЛучше уж взять HTML, трудоёмкость на пару порядков меньше, для реализации подобного, решается довольно легко.Excel
Сортировка по столбцам и подстолбцам поддерживается? Просто нашкарябать сетку хоть на чём можно.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320051
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Doomplay998Алексей Кпропущено...
Excel
Сортировка по столбцам и подстолбцам поддерживается? Просто нашкарябать сетку хоть на чём можно.Excel VBA ?
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320072
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КExcel VBA ?

Браво
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320078
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCharles WeylandВо-первых, напеинтил я за 3 или 4 рабочих дня

Ну да, ну да... Это из разряда «..и 8 шапок сошьём..».
не, ошибок, конечно, там дофига было)) но уже что-то отображало. Правил я потом это неопределённое время. Но версия, отображающая куб в нужном виде была готова в конце той же недели.
За сколько я сделал компонент "от" и "до" - не скажу, т.к. я много раз к нему возвращался. Саму программу, работающую с олап (там и отчёты, и ввод данных и распределение прав) и основанную на моём компоненте, я делал с нуля 1.5 года, потом полгода поддерживал и ушёл.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320080
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttЛучше уж взять HTML, трудоёмкость на пару порядков меньше, для реализации подобного, решается довольно легко.Excel
я в excel прикреплённые на первой странице данного топика рисунки и оформлял :)

Алексей КExcel VBA ?

Ага, прошлое зовёт меня

Но я...

.. не вернусь.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320105
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandАлексей Кпропущено...
Excel
я в excel прикреплённые на первой странице данного топика рисунки и оформлял :)

Алексей КExcel VBA ?

Ага, прошлое зовёт меня

Но я...

.. не вернусь.

Уже вернулся... Фраза: "а вот в OLAP", - тому подтверждение :)
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320112
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAУже вернулся... Фраза: "а вот в OLAP", - тому подтверждение :)
во-первых, не было такой фразы
во-вторых, OLAP вообще не имеет никакого отношения к excel
в-третьих, речь шла не об OLAP, а о гриде, который я нарисовал при написании своего клиента OLAP. Просто потому что вообще в этом топике речь идёт о гридах.

p.s.
Doomplay998Кстати, могу поделиться кодом
спасибо за код, это крайне интересно
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320123
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Charles Weylandтипа, Multi Dim - сам придумал и сделал
Charles WeylandВо-вторых OLAP (кто не знает олап, можете сводные таблицы в эксель вспомнить) всегда ровно именно в таких таблицах отображается и это самый удобный вариант из всего возможных.
То-то и оно, что OLAP в таких таблицах отображается , а строятся эти таблицы из таблиц обыкновенных реляционных баз.
Придумали нестандартное хранилище, теперь придумывает нестандартный интерфейсю

Как средство изучения языка - очень хорошо, но программу свою вы НИКОГДА не допишите выше бета версии.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320150
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стоп , не мешайте всё в кучу.

MDTable - класс, который хранит в себе информацию в иерархичном виде. Предназначен для данных небольшого объёма - 10-50 человек, у каждого по 3-4 книги и т.д.
Передо мной стоит задача создать компонент для визуализации и редактирования данных этого объекта.

OLAP - это ВАААЩщще из другой оперы! Общее лишь в том, что там тоже есть иерархии. И то, что я для клиента OLAp делал подобный (подобный, то есть чем-то похожий, то есть, с иерархиями, объединениями ячеек) грид. На этом всё.
В том проекте у меня было хранилище данных, с помощью SSIS я передавал данные в SSAS ежесуточно. Вносимые данные можно было просматривать на следующий день - и это всех устраивало. Грид использовался и для просмотра данных из OLAP, и для просмотра данных из реляционной базы - во втором случае пользователь мог добавить новые данные. Только добавлялись они не в редактируемые ячейки (ячейки не были редактируемыми), а в отдельные окна. Excel-"продвинутые" подключались к моему кубу прямо из экселя. А у кого пониже квалификация, использовали мою программу, где были настраиваемые заготовки и куча интерактивных подсказок.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320184
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Charles WeylandMDTable - класс, который хранит в себе информацию в иерархичном виде.
Информацию в иерархичном виде хранит тот, кто не умеет проектировать реляционные базы
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320230
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Charles WeylandMDTable - класс, который хранит в себе информацию в иерархичном виде.
Информацию в иерархичном виде хранит тот, кто не умеет проектировать реляционные базы
Блджять))))
Да в реляционном виде у меня хранится всё, в sqlite.
MDTable создан для хранения информации, которую отображает MDGrid
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320231
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, даже не хранение.
MDTable - это просто внутреннее представление MDGrid. И всё
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320244
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А MDGrid - это компонент, который пытаюсь написать, в связи с чем, собственно, топик и создан.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320373
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandskyANAУже вернулся... Фраза: "а вот в OLAP", - тому подтверждение :)
во-первых, не было такой фразы
Ну не точно такая фраза, а, цитирую: "OLAP (кто не знает олап, можете сводные таблицы в эксель вспомнить) всегда ровно именно в таких таблицах отображается и это самый удобный вариант из всего возможных".

Снимите шоры из своего прошлого, попробуйте посмотреть на задачу иначе. Проведите брейншторм с заказчиком.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320376
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland, если не секрет, а при чём тут термин multidimensional?
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320400
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПроведите брейншторм с заказчиком.
самый лучший вариант отображения данных - на скриншоте на предыдущем листе. До этого варианта было много других, но подходит именно этот. Вся необходимая информация прямо перед глазами.

skyANACharles Weyland, если не секрет, а при чём тут термин multidimensional?

Вообще-то не
skyANAmultidimensional?
а
Charles Weyland типа Multi Dim
Просто потому что это не совсем обычная плоская таблица.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320462
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandПросто потому что это не совсем обычная плоская таблица.

Любые 3 таблицы уже образуют multi. Только вот всё можно свести к плоской таблице, и вообще почитай про нормализацию, не стоит употрелять термин OLAP не к месту, просто чтобы не натыкаться на решения задач, тебе совсем не подходящих.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320476
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне стоит употрелять термин OLAP не к месту
Да вы вообще невнимательно читаете. Нельзя так) Где это "не к месту"? :)

Я вообще не употреблял этот термин не к месту. Мой проект не имеет никакого отношения к OLAP.
Когда мне сказали, что придётся делать свой компонент, я пояснил, что когда-то для OLAP, так что и сейчас не обломает меня.
Так же я пояснил, что в моей таблице внутри 1 столбца могут находиться ещё несколько, а внутри одного из них тоже, в свою очередь, ещё несколько. И такой подход к представлению данных не является новым - например, OLAP отчёты так выглядят. Ну или если кто не знаком с OLAP - могут вспомнить сводные таблицы в excel. Тоже так же выглядят.
hVosttЛюбые 3 таблицы уже образуют multi.
Ну вот поэтому MDTable.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320478
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandчто когда-то для OLAP делал ,
слово "делал" пропустил.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320508
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandТак же я пояснил, что в моей таблице внутри 1 столбца могут находиться ещё несколько, а внутри одного из них тоже, в свою очередь, ещё несколько. И такой подход к представлению данных не является новым - например, OLAP отчёты так выглядят. Ну или если кто не знаком с OLAP - могут вспомнить сводные таблицы в excel. Тоже так же выглядят.
hVosttЛюбые 3 таблицы уже образуют multi.
Ну вот поэтому MDTable.
Хм, возьмём Kibana, что отображает данные из Elasticsearch, где они хранятся в виде агрегатов, у которых "внутри 1 столбца могут находиться ещё несколько, а внутри одного из них тоже, в свою очередь, ещё несколько".
И Kibana прекрасно отображает такие данные :)
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320834
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Charles Weylandсамый лучший вариант отображения данных - на скриншоте на предыдущем листе
Придумать что-то хуже этого - надо еще постараться.
Прикиньте, как будет выглядеть Ваше грид, если у каждого будет по 100 песен
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320868
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2если у каждого будет по 100 песен
Грид будет выглядеть крайне поршиво.

Всё упирается в предметную область.
На самом деле, как я где-то говорил, речь идёт не о песнях с книгами, а о соревнованиях.
Ученик может участвовать в одной или двух возрастных категориях соревнований. Но никак не в 100 категориях.
У него может быть 1 или 2 тренера. Ну, 3 на крайняк. Но также не 100.

Самих учеников может быть ну 20 от силы. Ок, пусть 50.
Удобно увидеть список участников и прямо по списку что-либо объявлять, сверять его с заявками и другими документами.
Так что я настаиваю на том, что именно этот вариант самый удобный и эффективный.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320876
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Charles Weyland,

Попробуйте для начала использовать DataGrid из NetFramework 1.0. Он может показывать вложенные таблицы. Не DataGridView.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320878
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Прикиньте, как будет выглядеть Ваше грид, если у каждого будет по 100 песен
кстати, даже если речь о песнях, то при 100 песнях, имеющихся у автора, заказчик мог потребовать вывлжиь последние 3 песни (или самые популярные 3, а четвёртой "подстрокой" фразу "ещё 97 песен").
Это я сейчас просто фантазирую.

Это, ещё раз скажу, всё зависит от требований заказчика, от того, как ему по каким-то причинам удобно. Так что нельзя однозначно утверждать, что "хуже такого представления нельзя придумать и оно не годится". Тут просто необходимо уточнить детали, как отображать конкретные ситуации. Напр, 100 песен.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320879
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Попробуйте для начала использовать DataGrid из NetFramework 1.0
Да я уже в процессе реализации. Вопросы исчерпаны))
Cat2 Не DataGridView.
Вы первый в этом топике, кто произнёс это слово. О нём речи не шло.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39320895
Doomplay998
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Charles Weylandсамый лучший вариант отображения данных - на скриншоте на предыдущем листе
Придумать что-то хуже этого - надо еще постараться.
Прикиньте, как будет выглядеть Ваше грид, если у каждого будет по 100 песен
Книги и песни явно просятся в третье измерение. Можно сделать их более компактным списком (выпадающем или с прокруткой), а то и в отдельное всплывающее окно "Отобразить список" поместить.

Уплощать дополнительные измерения можно только если количество данных в этих измерениях небольшое.
...
Рейтинг: 0 / 0
Типа, многомерная таблица. На основе чего ее лучше делать?
    #39321120
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как сделайте хоть скриншоты запостите, глянем на результаты :) может, кто и посоветует чего хорошего.
Срач развели на пустом месте, впрочем, как обычно.
Если хотите высокую производительность при большом объеме информации, смотри в сторону Visual.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Типа, многомерная таблица. На основе чего ее лучше делать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]