0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 13

DataGrid. Скрыть/показать строки по условию

28.01.2016, 12:21. Показов 5483. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На прикреплённой картинке имеется DataGrid, который содержит 2 столбца, первый - название параметра, а второй -значение.
Вопрос: как реализовать скрытие/отображение строк "параметр 1" и "параметр 2", если вышестоящий ComboBox в столбце "значение" принимает значение False/True соответственно. Под скрыть я подразумеваю вообще убрать из DataGrid, а под показать - добавить(вернуть на место).

DataGrid "забиндин" под модель:
C#
1
2
3
4
5
6
    public class ParamContainer
    {
        public string parameter { get; set; }
        public string value { get; set; }
 
    }
Combobox'ы прикручены с помощью:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        public DataTemplate dataTemplate;
        public DataTemplate ComboboxTemplate { get; set; }
        public DataTemplate NotComboboxTemplate { get; set; }
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            ParamContainer ParamContainer = item as ParamContainer;
            if (ParamContainer != null)
            {
                if ((ParamContainer.parameter == "Включить параметры 1, 2?") || (ParamContainer.parameter == "Включить параметры 3,4?") ||
                    (ParamContainer.parameter == "Включить параметры 5,6?"))
                {
                    return ComboboxTemplate;
                }
                else
                    return NotComboboxTemplate;
            }
            else
                return base.SelectTemplate(item, container);
        }
А на форме "обработчики шаблонов"(если можно так выразиться):
XML
1
2
3
4
5
6
7
8
9
10
        <DataTemplate x:Key="ComboboxTemplate">
            <ComboBox ItemsSource="{StaticResource ComboboxItemsListString}"
                      DisplayMemberPath="ValueString"
                      SelectedValuePath="ValueString"
                      SelectedValue="{Binding value}"
                      SelectionChanged="KVSelector_SelectionChanged"/>
        </DataTemplate>
        <DataTemplate x:Key="NotComboboxTemplate">
            <TextBox Text="{Binding value}"/>
        </DataTemplate>
и ресурс для отображения того самого true/false в combobox'ах:
XML
1
2
3
4
5
6
    <Application.Resources>
        <x:Array x:Key="ComboboxItemsListString" Type="local:ComboboxItemString">
        <local:ComboboxItemString ValueString = "True" />
        <local:ComboboxItemString ValueString = "False"/>
        </x:Array>
    </Application.Resources>
C#
1
2
3
4
    public class ComboboxItemString
    {
        public string ValueString { get; set; }
    }
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2016, 12:21
Ответы с готовыми решениями:

Скрыть/Показать строки DatagridView
есть datagridview. Заполняется кодом. ФИО|Адрес|Телефон Отбор по полю адрес. Например вводим в текстовое поле адрес, нажимаем на...

Скрыть строки по условию
Добрый вечер! Возникла такая проблема, необходимо часто скрывать строки в файле, в зависимости от следующего условия: Если во всех...

Скрыть строки по условию
Здравствуйте господа-товарищи! у меня стоит следующая задача: имеется файл эксель с N количество листов. в каждом листе забиты...

2
14 / 14 / 7
Регистрация: 02.07.2016
Сообщений: 34
06.05.2018, 18:41
Привет.
Мне кажется вы не в том направлении роете, скорее всего вам нужны группировки, которые делаются через экземпляр класса CollectionViewSource. Он содержит ItemsSource для источника данных, а к DataGrid прикручивается так:
C#
1
DataGrid.ItemsSource = CollectionViewSource.View;
Я не могу тут написать, как делаются группировки, но в гугле точно найдете.
Кстати в группировках есть специальные конвертеры значений и тут уже вам будет где разгуляться
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
08.05.2018, 18:12
frankie1,

как правильно заметили выше, такое проще всего сделать с помощью группировки. Для этого в коллекции нужно поле, которое будет отвечать за группировку. В данном примере это Item2

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Test = new ObservableCollection<Tuple<string, string>>();
 
            Test.Add(Tuple.Create("Parameter 1", "Group1"));
            Test.Add(Tuple.Create("Parameter 2", "Group1"));
            Test.Add(Tuple.Create("Parameter 3", "Group2"));
            Test.Add(Tuple.Create("Parameter 4", "Group2"));
            Test.Add(Tuple.Create("Parameter 5", "Group2"));
            Test.Add(Tuple.Create("Parameter 6", "Group3"));
            Test.Add(Tuple.Create("Parameter 7", "Group3"));
            Test.Add(Tuple.Create("Parameter 8", "Group3"));
            Test.Add(Tuple.Create("Parameter 9", "Group3"));
            Test.Add(Tuple.Create("Parameter 10", "Group3"));
 
            var view = CollectionViewSource.GetDefaultView(Test);
            view.GroupDescriptions.Add(new PropertyGroupDescription("Item2"));
2 последние строки определяют гроппировку для коллекции, которая будет биндиться к датагриду.

далее задаем стиль группировки:
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
28
29
<DataGrid ItemsSource="{Binding Test}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Item1}"></DataGridTextColumn>
                <DataGridTextColumn Header="Group" Binding="{Binding Item2}"></DataGridTextColumn>
                <DataGridTextColumn Header="Wert" Binding="{Binding Item3}"></DataGridTextColumn>
            </DataGrid.Columns>
            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="auto"></RowDefinition>
                                                <RowDefinition></RowDefinition>
                                            </Grid.RowDefinitions>
                                            <CheckBox Content="{Binding Name}" x:Name="cbGroup"></CheckBox>
                                            <ItemsPresenter Grid.Row="1" Visibility="{Binding ElementName=cbGroup, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"></ItemsPresenter>
                                        </Grid>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>
        </DataGrid>
Миниатюры
DataGrid. Скрыть/показать строки по условию  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2018, 18:12
Помогаю со студенческими работами здесь

Скрыть/раскрытие строки по условию
Добрый день, уважаемые форумчане. Прошу помочь со следующей задачей. Необходимо написать макрос, который будет скрывать все...

Скрыть строки по условию в форме
Здравствуйте уважаемые. Как в ленточной подчиненной форме скрыть т.е отфильтровать те строки в которых по полю (2) нет даты можно при...

Объединить строки таблицы по условию и показать при нажатии
Здравствуйте. Уровень знакомства c JS — знание синтаксиса и основ. Ситуация такая. PHP-скрипт рисует таблицу и отдаёт её браузеру. ...

Блок div скрыть/показать при нажатии на кнопку "показать все"
Добрый день. На странице: https://moscow.xn--80aasvalvca.xn--p1ai/ru/rezume/massagists/belyaevdv/ не могу понять, как сделать так...

Показать / Скрыть
Здравствуйте! помогите сделать скрипт показать скрыть по клику, как показано на фото. Заранее спасибо)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru