Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
1

Строки DataGrid и вывод дополнительной информации под каждой строкой по клику

05.12.2016, 00:14. Показов 5298. Ответов 16

Author24 — интернет-сервис помощи студентам
Ситуация: надо вывести доп информацию. Есть DataGrid, в нём куча строк. При нажатии на кнопку в строке - появляеться доп. информация. Реализовано на данный момент "выделение строки - появляется 'доп. информация'" - через DataGrid.RowDetailsTemplate. Я не представляю как сделать "Чтобы работало через кнопку в строке". т.е. возникает ситуация "Выделил все строки - появилась Вся доп. инфомация под каждой строкой"(чего делать ненадо. Ибо выделение - работа с указанными данными). Как реализовать? Может нафиг "DataGrid.RowDetailsTemplate" и что-то другое сделать? Пример можно?

Если имеет значение: в "DataGrid.RowDetailsTemplate" запихан ещё "DataGrid", в котором "Доп. инфа" выводиться в структурированном виде. Я готов рассмотреть всё, что предложите. уже 3 дня мучаюсь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2016, 00:14
Ответы с готовыми решениями:

Вывод дополнительной информации по содержимому бд
Здравствуйте, помогите пожалуйста, возможно ли при клике на какую-либо ячейку в бд открывать новую...

Вывод дополнительной информации при генерации исключения
И так у меня есть часть кода SqlConnection con = new SqlConnection("Password=" + Password +...

Вывод в див имен из бд и при нажатии вывод в отдельный див дополнительной информации об этом имени
Есть две колонки div в одину(div1) из бд выводиться название зала и день недели, в другую(div2)...

Выделение строки dataGrid по клику мышки
Надо сделать выделение строки грида по клику мышки. Получаю индекс сроки: DataGrid.HitTestInfo...

16
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
06.12.2016, 12:29  [ТС] 2
нет ни у кого идей?
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
06.12.2016, 12:54 3
Expander ?
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
28.12.2016, 20:39  [ТС] 4
Извините что так долго, были неотложные дела. . .
Про expander я не знал, подумал над ним и пришёл к: извращаться с DataGrid(в смысле уровней вложенности) чтобы получить "Под каждой строкой раскрывается доп. блок с доп. инфой по нажатию кнопки в строке(Или галочке - вообщем чего-то)". Есть ещё идеи? Или может я не правильно понял о чём вы? Можно пример?

П.с.: причём доп. данные не подходят под колонки DataGrid-родителя. Т.е. структура данных(колонок) у родителя и у "доп. инфы" разные.
0
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
30.12.2016, 16:05  [ТС] 5
Вопрос ещё висит. Никто не может предложить более изящное решение, чем "Изощряться с DataGrid и Expander" ?

Добавлено через 17 минут
"Изощряться с DataGrid и Expander" - в смысле взаимная вложенность. . .
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
30.12.2016, 16:55 6
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<DataGrid RowDetailsVisibilityMode="Collapsed">
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <TextBlock Text="Test Details"/>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ToggleButton Content="Show Details" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}, Path=DetailsVisibility, Converter={local:VisibilityToBooleanConverter}, Mode=TwoWay}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[ValueConversion(typeof(Visibility), typeof(bool))]
    public sealed class VisibilityToBooleanConverter:MarkupExtension,IValueConverter
    {
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value as Visibility? == Visibility.Visible;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value as bool? == true ? Visibility.Visible : Visibility.Collapsed;
        }
    }
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
04.01.2017, 19:52  [ТС] 7
Студия мне пишет:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка Имя "VisibilityToBooleanConverter" не существует в пространстве имен "clr-namespace:WpfApplication1". WpfApplication1 \documents\visual studio 2015\Projects\WpfApplication1\WpfApplication1\MainWindow.xaml 20


Не смог понять: откуда брать эту функцию.

Добавлено через 4 часа 42 минуты
Я в чистом проэкте пытался запустить, чтобы глянуть "Что из себя представляет", а поисковик по слову "VisibilityToBooleanConverter" ничего дельного сказать не смог в плане "Подключения using".
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
04.01.2017, 23:28 8
Цитата Сообщение от 47911 Посмотреть сообщение
Студия мне пишет:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка Имя "VisibilityToBooleanConverter" не существует в пространстве имен "clr-namespace:WpfApplication1". WpfApplication1 \documents\visual studio 2015\Projects\WpfApplication1\WpfApplication1\MainWindow.xaml 20
Не смог понять: откуда брать эту функцию.
Добавлено через 4 часа 42 минуты
Я в чистом проэкте пытался запустить, чтобы глянуть "Что из себя представляет", а поисковик по слову "VisibilityToBooleanConverter" ничего дельного сказать не смог в плане "Подключения using".
Так я же привел код для VisibilityToBooleanConverter.
Поместите его в namespace WpfApplication1. Hапример в файле MainWindow.cs.
1
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
05.01.2017, 13:12 9
Наплодили тем) Там ответил
DataGrid и несколько видов(шаблонов) строк
0
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
06.01.2017, 10:52  [ТС] 10
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Так я же привел код для VisibilityToBooleanConverter.
Поместите его в namespace WpfApplication1. Hапример в файле MainWindow.cs.
Так и было сделано. Щас запустил перед созданием коммента - ошибки нет. Видимо был гон.

Добавлено через 39 минут
Что-то понять не могу:
Заменил на
XML
1
<CheckBox HorizontalAlignment="Left" Height="24" Margin="0,0,0,0" VerticalAlignment="Top" Width="120" Content="Show Details" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}, Path=DetailsVisibility, Converter={local:VisibilityToBooleanConverter}, Mode=TwoWay}"/>
а после запуска - ничего не вижу в Гриде(как и с ToggleButton). Что я делаю не так? Где путаница со стилями?

Добавлено через 16 минут
В смысле я не вижу надпси "Show Details", куда тыкать. невидно самого элемента.
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
06.01.2017, 13:25 11
47911, Для наглядности примера добавьте в грид строки, инициализировав ItemsSource.
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
07.01.2017, 09:32  [ТС] 12
Всё работает. Я думал надписи "Test Details", "Show Details" уже являются содержимым.

Добавлено через 37 секунд

Не по теме:

Где кнопка "Лучшего ответа"?!

0
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
08.01.2017, 15:48  [ТС] 13
Появился вопрос: а если мне надо сразу сделать 1 элемент раскрытым, не выделяя его. Т.е. сразу, при запуске приложения. Или несколько, скажем есть:
C#
1
2
3
4
            S.Add(new AZAZZA("1", "111"));
            S.Add(new AZAZZA("2", "222", true));
            S.Add(new AZAZZA("3", "333"));
            S.Add(new AZAZZA("4", "444", true));
Где "true" - открытый "RowDetailsTemplate". Как писать?

П.с.: и как можно скрыть строку, с раскрытым "RowDetailsTemplate"(Знаю что вопрос выглядет по идиотски, но нада.).

Добавлено через 2 часа 2 минуты
Имея ввиду такой класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
    class AZAZZA
    {
        public AZAZZA(string HAZBAHuE, string ZHA4EHuE, bool OTKPblTO = false)
        {
            this.Z1 = HAZBAHuE;
            this.Z2 = ZHA4EHuE;
            this.Z3 = OTKPblTO;
        }
        public string Z1 { get; set; }
        public string Z2 { get; set; }
        public bool Z3 { get; set; }
    }
0
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
10.01.2017, 21:13  [ТС] 14
Я спросил что-то сложное\невозможное?
0
879 / 558 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
11.01.2017, 16:02 15
47911,

с rowdetails я еще не сталкивался, но первое, что приходит в голову- сделать шаблон для строки датагрида, в нем поместить экспандер, его свойство IsExpanded биндить к какому-то бул.свойтсву коллекции, в итоге и ваш вопрос из предпоследнего поста решится сам собой. просто при инициализации коллекции задаете те строки, информация которых должна быть видна сразу
1
2 / 2 / 0
Регистрация: 18.06.2016
Сообщений: 143
14.01.2017, 20:27  [ТС] 16
Такой вопрос: расшифруйте мне содержимое
C#
1
                return value as bool? == true ? Visibility.Visible : Visibility.Collapsed;
в смысле: как будет полный синтаксис? без сокращений.

Добавлено через 9 минут
Что содержится в value? Контекст: пост номер 6, Строки DataGrid и вывод дополнительной информации под каждой строкой по клику

И пожалуйста объясните связь между "Convert, ConvertBack" и XAML кодом программы. Ведь явно не указано: когда использовать эти функции.
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
14.01.2017, 23:39 17
C#
1
2
3
4
5
6
7
8
9
Nullable<bool> typedValue = value as Nullable<bool>;
if (typedValue!=null && typedValue.Value == true)
{
     return Visibility.Visible;
}
else
{
     return Visibility.Collapsed;
}
ValueConverter-ы используются в WPF Binding-ах, когда типы привязываемых свойств не совпадают.
В данном случае с одной стороны биндинга (Source) находится свойство DataGridRow.DetailsVisibility с типом Visibility, а с другой стороны (Target) находится свойство ToggleButton.IsChecked с типом bool.
Методы Convert, ConvertBack вызываются, когда необходимо выполнить привязку - в данном случае привязка триггерится OnPropertyChanged привязываемых свойств. При изменении Source вызывается Convert, а при изменении Target вызывается ConvertBack.
1
14.01.2017, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2017, 23:39
Помогаю со студенческими работами здесь

Вывод информации из бд php по клику на картинке
Есть бд php. В ней картинки. У каждой картинки есть ид - work_id и инфа (topic, about). У меня...

Вывод информации из бд php по клику на картинку
Есть база данных php. В ней содержатся картинки. Необходимо, чтобы выводилась информация из бд,...

Выводить только измененные строки. Перед каждой строкой записывать номер строки в исходном тексте
Ребята программята ,срочно нужна ваша помощь в составлении программы

Вывод информации из базы данных в dataGrid
Здравствуйте, имеется код с помощью которого у меня выводится информация из базы данных в таблицу...

Вывод информации в textbox из DataGrid WPF
Как сделать, чтобы при выборе любой строки в DataGrid, вся информация которая записана в БД,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru