powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Нужно нарисовать таблицу в WPF!
17 сообщений из 17, страница 1 из 1
Нужно нарисовать таблицу в WPF!
    #39556592
Derzkii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начинаю осваивать WPF. Нужно нарисовать такую таблицу. Поля Name1-15 - просто текст, Data1-9 - данные из БД. Помогите пожалуйста!
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39556637
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DerzkiiНачинаю осваивать WPF.
Начинают с Hello World.
Т.е. не твоей, а той что найдёте в книгах, инете.
А потом переделываете под свою.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39556643
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DerzkiiНачинаю осваивать WPFКакая-то литература изучена? Или методом тыка решил?
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39556669
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DerzkiiНачинаю осваивать WPF. Нужно нарисовать такую таблицу. Поля Name1-15 - просто текст, Data1-9 - данные из БД. Помогите пожалуйста!


в 3 словах что нужно сделать:
Знать основы Binding'а, Макетрирования, Панелей, Связывания коллекций
Изучить как работает контроль ItemsControl
Создать контрол в котором будет ItemsControl в котором элментами списка являются ItemsControl'ы
Завернуть это всё в ScrollViewer
Можно делать с виртуализацией, но это сложнее.
Вариант проще:
Взять DataGrid\ListView задать шаблон так, что выглядеть будет точь в точь как таблица на экране, отключить функционал в контроле, если нужно это просто как визуальный элемент.
Не имеет смысла пилить свой Grid, задайте внешний вид существующему, возможности WPF в этом плане безграничны.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39559743
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разрешите, продолжу в этой же теме?

Сначала дам совет вопрошающему:
пока не выучишь самый минимум, хотя бы (но основательно, наизусть)
WPF Productivity Playbook
и

WPF Data Binding in Depth
пытаться это сделать даже не пробуй. После этого ищи больше инфы и ищи её в зависимости от того. И уже когда будет более-менее толковая база, тогда по какой-то конкретике можешь обращаться на форумы. Иначе ответ на один вопрос будет порождать вереницу других вопросов.

После этого можешь вернуться сюда и тебе будет совершенно понятен мой: Создавай DataGrid, в котором настрой CellTemplate для этих столбцов таким образом, чтобы он представлял собой DataGrid с атрибутом HeadersVisibility="None".
Другими словами, просто сделай так, чтобы каждый твой CellTemplate представлял собой DataGrid.
Суть в том, что в WPF все компоненты можно друг в друга вкладывать. Таблицы в ячейки, кнопки в кнопки, картинки или целые форматированные панели в пункты меню или в качестве элементов списков.


У меня вопрос чуть сложнее:
Такой столбец (в ячейки которого вложена таблица) всего 1. Остальные столбцы "обычные".
Каждая ячейка этого столбца представляет собой DataGrid с 3 столбцами - всё это описано в шаблоне и указано как CellTemplate.
А вот HeaderTemplate представляет собой GridViewHeaderRowPresenter, и там пришлось опять в свойстве Columns описывать эти три столбца, чтобы был заголовок.

Визуально всё красиво, но вложенные в ячейки таблицы не реагируют на изменение ширины столбцов и их перестановку (оно и логично, GridViewHeaderRowPresenter с теми гридами никак не связан).
Не могу уловить, как правильно сделать. По идее, заголовок я вообще должен описывать с помощью DataGridRowHeader, но как в нём описать столбцы, если там даже Columns нет. Не могу понять, как его связать с теми DataGrid'ами.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39559744
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, не дописал:
Код: c#
1.
ищи её в зависимости от того, насколько ты оцениваешь своё понимание платформы
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39559746
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и поправка номер два:
хорошо я согласенПо идее, заголовок я вообще должен описывать с помощью DataGridRowHeader DataGridColumnHeadersPresenter
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39559890
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока додумался только до такого варианта:
В основной таблице среди прочих создаю колонку:
Код: xml
1.
2.
3.
4.
5.
<GridViewColumn Width="300"
                x:Name="docscol"
                Header="документы"
                HeaderTemplate="{StaticResource BooksHeaderTemplate}"
                CellTemplate="{DynamicResource BooksCellTemplate}" />


Код: xml
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.
        <DataTemplate x:Key="BooksHeaderTemplate">
            <DataGrid ItemsSource="{Binding Mode=Default, XPath=./documents}" AutoGenerateColumns="False">
                <DataGrid.Template>
                    <ControlTemplate>
                        <StackPanel>
                            <DataGridColumnHeadersPresenter />
                        </StackPanel>
                    </ControlTemplate>
                </DataGrid.Template>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="type" Binding="{Binding Mode=OneWay, XPath=type}" />
                    <DataGridTextColumn Header="name" Binding="{Binding Mode=OneWay, XPath=name}" />
                    <DataGridTextColumn Header="size" Binding="{Binding Mode=OneWay, XPath=size}" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
        <DataTemplate x:Key="BooksCellTemplate">
            <DataGrid HeadersVisibility="None"
                      AutoGenerateColumns="False"
                      ItemsSource="{Binding Mode=Default, XPath=./documents}">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Mode=OneWay, XPath=type}" />
                    <DataGridTextColumn Binding="{Binding Mode=OneWay, XPath=name}" />
                    <DataGridTextColumn Binding="{Binding Mode=OneWay, XPath=size}" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>


Осталось только связать два грида между собой и убрать описание колонок из того грида, что представлен в шаблоне Template.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39559986
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, но DataGrid не предназначен для сводных и многоуровневых таблиц, для этого лучше использовать всякие телерики и прочее.
Как то делать было не чего, переопределил методы Measure\Arrange и добавил возможность делать для ячейки Merge по столбцам, Так как ячейки закидываются по сути в Grid, это можно сделать довольно легко.
Получалось в целом прикольно, но нужно было еще переделывать навигацию по кнопкам.
Объединение по строкам, можно реализовать в рамках 1 строки, как вариант.
но всё это костыли на костыле, лучше использовать готовый DataGrid, а не пытаться делать самому.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560015
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С одной стороны, да.

Но с другой два минуса:
мне так и не удалось найти такой грид. Думаю, если он и есть, то у него будет какая-то своя толстая документация и в нагрузку специфика, которую потом хрен преодолеешь (напр., хочу помимо грида в этой ячейке кнопочку какую-нибудь запилить в уголке, типа, "редактировать в отдельном окне", или несколько кнопочек - ну я к примеру. Или значок какой, или форматирование особое или ещё что-то). Речь не о том,что "нельзя! не эргономично!", потому что ответом будет "ты посмотри сначала конечный вариант и потом уже скажешь, эргономично это или нет.

в принципе, получился ж грид тот, что нужно. Осталось лишь "поженить" столбцы в заголовке со столбцами в ячейках - как-то забайндить свойство Width и позицию столбцов.

Вот, если так сформулировать задачу: есть два одинаковых грида с одинаковым контентом. Как их синхронизировать их ширины колонок и позиции столбцов? Такая задача вполне может быть полезной в приложении, что-то выводящее на проекторе какие-то отдельные элементы, с которыми манипулирует оператор.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560025
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласеннапр., хочу помимо грида в этой ячейке кнопочку какую-нибудь запилить в уголке, типа, "редактировать в отдельном окне"
Так можно всё оправдать.
Кнопка в уголке это нестандартный грид.
Такой, как сапоги индивидуального пошива.
Если есть html поддежка, то пиши туда ссылку.
А обычный грид редактор на события.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560028
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенВот, если так сформулировать задачу: есть два одинаковых грида с одинаковым контентом.не надо объединять ячейки.
Есть DataGrid а есть DBGrid.
В первом рисуем, а во втором только группировка. Как в дельфи)))
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560051
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ширину столбцов можно попробовать синхронизировать через

Grid.IsSharedSizeScope="True"
DefinitionBase.SharedSizeGroup="SomeGroup"

Первое это AP, её нужно присобачить на самом верхнем уровне, а второе задается в Column\RowDefinition для 2 колонок\строк. Тогда между ними размеры будут синхронизироваться.
Но работает, это не очень надежно, если честно.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560487
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного экспериментировал и столкнулся со странной штукой. Создал таблицу, третий столбец содержит в себе список.
Странность в том, что в режиме разработки этот список заполнен корректно. В рантайме ячейки третьего столбца пустые. output не содержит никаких warning и error. Не могу понять, в чём дело.
Код: xml
1.
2.
3.
4.
5.
6.
7.
<XmlDataProvider x:Key="MDSource"
                 d:IsDataSource="True"
                 Source="Data/1.xml" />

<DataTemplate x:Key="DocumentosCellTemplate">
    <ListBox  ItemsSource="{Binding Mode=TwoWay, XPath=./documents}" />
</DataTemplate>


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Grid x:Name="LayoutRoot">
    <DataGrid x:Name="list"
              ItemsSource="{Binding Mode=Default, Source={StaticResource MDSource}, XPath=rss/row}"
              AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Фамилия" Binding="{Binding XPath=./family}" />
            <DataGridTextColumn Header="Имя" Binding="{Binding XPath=./name}" />
            <DataGridTemplateColumn Width="300"
                            Header="доки"
                            CellTemplate="{DynamicResource DocumentosCellTemplate}" />
       </DataGrid.Columns>
     </DataGrid>
</Grid>
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560491
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560504
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, опечатался. Там нужно было StaticResource.
Короче, ТС, получай готовое решение.
...
Рейтинг: 0 / 0
Нужно нарисовать таблицу в WPF!
    #39560506
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрите через Snoop! или Debuger Tools из VS, возможно дело в том, что в RunTime какие то ресурсы на уровне приложения или чего то еще перекрывают стиль ячейки или ListBox'са
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Нужно нарисовать таблицу в WPF!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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