Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/274: Рейтинг темы: голосов - 274, средняя оценка - 4.86
71 / 69 / 19
Регистрация: 13.12.2011
Сообщений: 274

Как получить значение ячейки DataGrid

08.03.2012, 22:43. Показов 57115. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть DataGrid
XML
1
2
3
4
5
6
<DataGrid AutoGenerateColumns="False"  Name="dataGrid1" VerticalAlignment="Stretch" IsReadOnly="True" MouseDoubleClick="dataGrid1_MouseDoubleClick">
            <DataGrid.Columns>
                <DataGridTextColumn  Binding="{Binding [name]}"></DataGridTextColumn>
                <DataGridTextColumn  Binding="{Binding [fname]}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
Загружаем в него данные:
C#
1
2
3
4
private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            dataGrid1.ItemsSource = DBConnect.firm_get_all().Rows;
        }
Как получить значение выделенной ячейки DataGrid'а, например по двойному клику мышки?

Код
C#
1
2
3
4
private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show(dataGrid1.CurrentCell.Item.ToString());
        }
Не работает!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2012, 22:43
Ответы с готовыми решениями:

Как получить значение выделенной ячейки в DataGrid
Как получить значение выделенной ячейки в DataGrid?

Получить значение ячейки dataGrid
Здравствуйте, подскажите как в dataGrid получить значение определенной ячейки. Например i-я строка, j - столбец?

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

56
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 08:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ppvl132 Посмотреть сообщение
А как найти конкретное свойство класса, которое к столбцу привязано?
А в DataGrid вы разве не привязываете колонки к определённым свойствам класса?
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 09:05
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А в DataGrid вы разве не привязываете колонки к определённым свойствам класса?
Предположим привязываю, но где в вашем решении выделение, ячейки? Ну покликайте мышью по ячейкам, видите выделение прямоугольное? Вот оно мне и надо. Возможно к индексу столбца надо как-то привязаться, но я не нашел решения. Да и кстати, пересмотрел свое решение, в нём общие элементы графического интерфейса, они к моему макету отношения не имеют, если бы я по именам к ним обращался, другое дело, а так мне голову заморочили только.
0
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 09:20
Цитата Сообщение от ppvl132 Посмотреть сообщение
но где в вашем решении выделение, ячейки?
Вы внимательно читали?
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
C#
1
_myCellValue = MySelectedItem.MyDataField;
Вот значение вашей ячейки в VM.
Цитата Сообщение от ppvl132 Посмотреть сообщение
а так мне голову заморочили только
Я не морочу голову, а говорю как правильно это делать в в MVVM. В VM для WPF единственная ссылка на PresentationCore.dll должна быть только на CommandManager, для правильной работы команд, и то тут можно решить всё по другому.
Все остальные ссылки на классы элементов UI там запрещены. Всё решается через привязки к публичным свойствам VM.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 09:21
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ViewModel должна находится в отдельной сборке (проекте) в которой даже ссылок нет на View типы (DataGridCellInfo, TextBlock).
А разбор визуального дерева в ViewModel... воще, треш.
Не согласен, если бы из моего View были какие-то объекты, тогда неправильно, а если какие-то стандартные графические объекты, то почему им нельзя там находиться, ну и практически не сомневаюсь, что у вас нет другого решения.
0
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 09:26
Цитата Сообщение от ppvl132 Посмотреть сообщение
ну и практически не сомневаюсь, что у вас нет другого решения
Я выше показал как это делается... Мдааааа....

Добавлено через 2 минуты
ppvl132, Изучайте - Паттерн MVVM
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 09:35
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Я выше показал как это делается... Мдааааа....
Выше где?
Вот эта строка? _myCellValue = MySelectedItem.MyDataField;

Что такое MyDataField ? В таком случае? Я правильно понимаю, что это свойство вашего класса, элемента коллекции, которое привязано к одному из столбцов?

Вы сможете рабочий код написать, это не упрек, просто хочется взять ваше правильное MVVM решение, вместо своего кривого?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 09:41
Цитата Сообщение от ppvl132 Посмотреть сообщение
Не согласен, если бы из моего View были какие-то объекты, тогда неправильно
От вашего согласия-несогласия это не зависит.
Весь смысл паттернов "MV*" в разделении слоёв и в их независимости.
Например, как ваша VM будет работать с GUI на UWP, Авалонии или даже Консоли?
Не путайте "Работающее" приложение с приложением с "ПРАВИЛЬНОЙ АРХИТЕКТУРОЙ".

Цитата Сообщение от ppvl132 Посмотреть сообщение
ну и практически не сомневаюсь, что у вас нет другого решения
Я даже комментировать это не хочу.
Для начала хотя бы почитали мои темы и сообщения в этом разделе, прежде чем такое писать.
0
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 09:46
Цитата Сообщение от ppvl132 Посмотреть сообщение
Вы сможете рабочий код написать, это не упрек, просто хочется взять ваше правильное MVVM решение, вместо своего кривого?
Вы ссылку прочитали, которую я вам дал? Там всё расписано, прочитайте, повторите приложение, которое там разбирают и всё поймёте. Не поймёте с первого раза, прочитайте 2-3-4-5-6-7-8-9-10 раза и до тех пор пока не поймёте.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 09:54
Цитата Сообщение от ppvl132 Посмотреть сообщение
просто хочется взять ваше правильное MVVM решение
Если вы хотите НАУЧИТЬСЯ создавать приложения с правильной архитектурой, то сразу предупреждаю, для простых задач такие приложения будут объёмнее по коду.
Самом по себе ООП (в том числе и всего паттерны для него, включая MV*) - это ответ на усложнение приложения на всех этапах его жизни: проектирование, разработка, продажу, поддержку, модернезацию и т.д. Все эти задачи решаются КОЛЛЕКТИВОМ, а не одним разработчиком. И потребовалось упрощение, какие-то общие правила для КОЛЛЕКТИВА. При этом на для единичного разработчика в этом коллективе это очень часто приводи к усложнению работы.

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

Что касается конкретно ViewModel - это слой отражающий Модель в удобном для View виде. Для WPF - это отражение через свойства. По сути это прокси для Модели. Никакой связи, ни в какой форме в ViewModel с View быть не должно.
Есть другой паттерн MVP. В нём Презентер напрямую работает с View. Но View о Презентере ничего не знает. В других паттернах - другие правила, соглашения.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 09:58
Цитата Сообщение от Элд Хасп Посмотреть сообщение
От вашего согласия-несогласия это не зависит.
Весь смысл паттернов "MV*" в разделении слоёв и в их независимости.
Например, как ваша VM будет работать с GUI на UWP, Авалонии или даже Консоли?
Не путайте "Работающее" приложение с приложением с "ПРАВИЛЬНОЙ АРХИТЕКТУРОЙ".


Я даже комментировать это не хочу.
Для начала хотя бы почитали мои темы и сообщения в этом разделе, прежде чем такое писать.
У вас есть пример кода с "ПРАВИЛЬНОЙ АРХИТЕКТУРОЙ", вместо поучений? Интересует нахождение значения выделенной ячейки в DataGrid.
На консоли никак работать не будет, там не отрисуется ничего и следовательно ни о какой выделенной ячейки не может быть и речи. С UWP и Авалонией не знаком. Должно работать, где .Net Core 7 есть.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 10:05
Цитата Сообщение от SmirnoFF.Oleg Посмотреть сообщение
Как получить значение выделенной ячейки DataGrid'а, например по двойному клику мышки?
В общем виде, эта задача не имеет решения поскольку ячейка DataGrid просто не имеет значения.
Например там может быть картинка, видео, какой-то сложный многосоставной UserControl и др.
В конкретно какой-то определённой компоновке, то, что вы скорее всего имеете ввиду, это будет значение TextBlock или TextBox находящихся в контенте ячейки.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 10:07
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Вы ссылку прочитали, которую я вам дал? Там всё расписано, прочитайте, повторите приложение, которое там разбирают и всё поймёте. Не поймёте с первого раза, прочитайте 2-3-4-5-6-7-8-9-10 раза и до тех пор пока не поймёте.
Вы сами-то ее прочитали? Где там заголовок темы форума?
0
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 10:12
Цитата Сообщение от ppvl132 Посмотреть сообщение
Где там заголовок темы форума?
А причём тут тема форума? Там рассказано про паттерн MVVM - как оно работает и как делать правильно.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 10:14
Цитата Сообщение от ppvl132 Посмотреть сообщение
У вас есть пример кода с "ПРАВИЛЬНОЙ АРХИТЕКТУРОЙ", вместо поучений?
А смысл?
Вам же оно не нужно.
Вы даже не хотите задуматься как к этому подойти.

Просто попробуйте реализовать ваше решение из поста #15 с разделение слоёв по проектам и сами поймёте в чём проблема такого решения.

Цитата Сообщение от ppvl132 Посмотреть сообщение
На консоли никак работать не будет, там не отрисуется ничего и следовательно ни о какой выделенной ячейки не может быть и речи.
Во!
Значит "выделенная ячейка" - это характеристика View и не имеет никакого отношения к ViewModel. Следовательно и какой-то работы с "выделенной ячейкой" в ViewModel быть не должно. В крайнем случае в ViewModel нужно передать само "значение", но никак не ячейку.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 10:14
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В общем виде, эта задача не имеет решения поскольку ячейка DataGrid просто не имеет значения.
Например там может быть картинка, видео, какой-то сложный многосоставной UserControl и др.
В конкретно какой-то определённой компоновке, то, что вы скорее всего имеете ввиду, это будет значение TextBlock или TextBox находящихся в контенте ячейки.
Всё верно, поэтому в моем решении и происходит проверка типа на TextBlock. Давайте отталкиваться от того, то там TextBlock, внутри которого string. В таком случает есть решение?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 10:16
Честно говоря, вообще, не пойму, откуда здесь поднялась тема MVVM. В вопросе ТС я этого не увидел. И решать эту задачу нужно целиком на уровне View.
MVVM здесь вовсе не зачем приплетать.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 10:16
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А причём тут тема форума? Там рассказано про паттерн MVVM - как оно работает и как делать правильно.
При том, что я в форуме пишу по теме форума и предлагаю своё решение, которое вам не нравится. Предложите своё, для этого форум и существует.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
18.12.2023, 10:17
Цитата Сообщение от ppvl132 Посмотреть сообщение
Всё верно, поэтому в моем решении и происходит проверка типа на TextBlock.
Да, ради бога.
Ваше решение работает - ну, и ладно.
Вот только MVVM здесь вовсе не причём. Ваш код должен быть реализован полностью в View.
0
 Аватар для Andrey-MSK
3386 / 2272 / 388
Регистрация: 14.08.2018
Сообщений: 7,690
Записей в блоге: 4
18.12.2023, 10:18
ppvl132, Вот вам про DataGrid - WPF DataGrid Practical Examples. Удачи в изучении.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 18
18.12.2023, 10:20
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Честно говоря, вообще, не пойму, откуда здесь поднялась тема MVVM. В вопросе ТС я этого не увидел. И решать эту задачу нужно целиком на уровне View.
MVVM здесь вовсе не зачем приплетать.
iliabest в 11-м сообщении упоминает MVVM.
То есть решения MVVM не существует?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2023, 10:20

Получить значение ячейки datagrid wpf
Нужно при нажатии на ячейку получить ее значение, перепробовал кучу способов, ни один не сработал, выручайте( Один из способов ...

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

Как поменять значение определенной ячейки DataGrid
Подскажите, пожалуйста! Есть DataGrid. В нем есть ( например ) 3 столбца и 3 строки. Как мне поменять значение ячейки во второй строке...

как получить значения строки и колонки выбранной ячейки DataGrid в MultiBinding?
В меня есть DataGrid и кнопка. У кнопки стоить MultiBinding. Нужно, чтобы в него помешались строка и столбец выбранной ячейки DataGrid....

WPF dataGrid Как получить данные из конкретной ячейки или строку в виде масива
Доброго времени суток пишу програмку в которой в dataGrid вносятся данные из XML файлов, пользователь должен редактировать данные в гриде...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru