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

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

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

Author24 — интернет-сервис помощи студентам
Есть 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2012, 22:43
Ответы с готовыми решениями:

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

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

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

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

56
181 / 107 / 13
Регистрация: 22.03.2010
Сообщений: 456
09.03.2012, 11:38 2
Цитата Сообщение от SmirnoFF.Oleg Посмотреть сообщение
Не работает!
А что именно не работает. MessageBox не выводится?
Если не выводится, попробуй PreviewMouseDoubleClick.
0
71 / 69 / 19
Регистрация: 13.12.2011
Сообщений: 274
09.03.2012, 13:13  [ТС] 3
Цитата Сообщение от Nukutu Посмотреть сообщение
А что именно не работает. MessageBox не выводится?
Если не выводится, попробуй PreviewMouseDoubleClick.
значение выделенной ячейки DataGrid'а не выводится! Я же писал суть вопроса!
0
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
11.03.2012, 09:42 4
SmirnoFF.Oleg,
ты вот так делай:
C#
1
MessageBox.Show(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[dataGridView1.CurrentCell.ColumnIndex].Value.ToString());
0
71 / 69 / 19
Регистрация: 13.12.2011
Сообщений: 274
11.03.2012, 13:20  [ТС] 5
У меня не dataGridView а dataGrid! Прошу не путать, я пишу не на windows forms, а на WPF!
0
5 / 5 / 1
Регистрация: 10.10.2011
Сообщений: 85
13.04.2012, 14:34 6
Аналогичная проблема, Вы не нашли решение?О_о
0
71 / 69 / 19
Регистрация: 13.12.2011
Сообщений: 274
15.04.2012, 21:54  [ТС] 7
Цитата Сообщение от Demiena Посмотреть сообщение
Аналогичная проблема, Вы не нашли решение?О_о
У меня есть:
C#
1
DataTable dt = new DataTable();
который мы заполняем Sql запросом:
C#
1
2
var da = new SqlDataAdapter("SELECT idz as [Номер заявки], kod, nachpodr, przak as [Предмет закупки], CONVERT(nvarchar(10), data, 104) as [Дата формирования], otisp as [Ответственный исполнитель], ... FROM ezakm WHERE ..., connstr);
da.Fill(dt);
После чего можно получить значение поля "Номер заявки" выделенной строки SelectedIndex:
C#
1
string str = dt.DefaultView[dataGrid1.SelectedIndex]["Номер заявки"].ToString();
3
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
15.04.2012, 23:38 8
C#
1
2
3
4
5
6
7
int selectedColumn = dataGrid1.CurrentCell.Column.DisplayIndex;
var selectedCell = dataGrid1.SelectedCells[selectedColumn];
var cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);
if (cellContent is TextBlock)
{
    MessageBox.Show((cellContent as TextBlock).Text);
}
9
58 / 58 / 11
Регистрация: 21.07.2009
Сообщений: 78
16.04.2012, 08:43 9
Вот как я делаю
C#
1
2
3
 if (dgClients.SelectedItems.Count== 0)  return;
            clientName = ((DataRowView)dgClients.SelectedItems[0]).Row["ClientName"].ToString();
            clientID = (int)((DataRowView)dgClients.SelectedItems[0]).Row["ID"];
3
5 / 5 / 1
Регистрация: 10.10.2011
Сообщений: 85
17.04.2012, 13:18 10
ооо!! огромное спасибо!! помогло))
0
16 / 16 / 3
Регистрация: 16.08.2011
Сообщений: 62
19.04.2012, 15:34 11
пишите на MVVM, и используйте DependencyPropertyDescriptor.

без MVVM вашу программу не оценят ни на одной фирме
0
3 / 3 / 1
Регистрация: 26.03.2013
Сообщений: 120
23.10.2013, 12:55 12
Цитата Сообщение от dextermd Посмотреть сообщение
C#
1
2
3
4
5
6
7
int selectedColumn = dataGrid1.CurrentCell.Column.DisplayIndex;
var selectedCell = dataGrid1.SelectedCells[selectedColumn];
var cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);
if (cellContent is TextBlock)
{
    MessageBox.Show((cellContent as TextBlock).Text);
}
Я это два дня ищу, спасибо!
1
7 / 7 / 2
Регистрация: 22.01.2015
Сообщений: 18
14.09.2017, 08:11 13
Жуть просто - как у вас всё сложно написано. Попробую написать проще(как сам пользуюсь).

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
using System.Data // - вроде
//Создаём табличку 
DataTable DT = new DataTable();
 
//Создаём столбцы в этой таблице
          DT.Columns.Add("№");
          DT.Columns.Add("Реципиент");
          DT.Columns.Add("Донор");
//с типами ячеек сами разберётесь(если не устраивает текстовый формат), инфы полно в "нэте"
 
//добавляем данные 
          DataRow Row = DT.NewRow();
          Row[0] = "1";
          Row[1] = "Recipient1";
          Row[2] = "Donor1";
          DT.Rows.Add(Row);
 
//помещаем табличку в  DataGrid и любуемся результатом
DataGridLinks.ItemsSource = DT.DefaultView;
 
//получаем данные из ячейки DataGrid
//приводим строку, по индексу 0, к типу DataRowView 
DataRowView drv = DataGridLinks.Items[0] as DataRowView;
//Либо первую выделенную строку
DataRowView drv = DataGridLinks.SelectedCells[0] as DataRowView; // можно в цикле перебрать все выделенные(как вам удобней)
//далее смотрим содержимое ячейки 3 отсчитывая от нуля(0, 1, 2)
MessageBox.Show(drv[2].ToString())";
//либо программно изменяем содержимое ячейка DataGrid
drv[2] = "Крови моей попил в своё время WPF";
Комментарий описывал "Ключами" чтобы текст съели поисковые системы.
3
0 / 0 / 0
Регистрация: 03.07.2020
Сообщений: 1
13.06.2021, 21:24 14
Цитата Сообщение от Ivan___ Посмотреть сообщение
Вот как я делаю
C#
1
2
3
 if (dgClients.SelectedItems.Count== 0)  return;
            clientName = ((DataRowView)dgClients.SelectedItems[0]).Row["ClientName"].ToString();
            clientID = (int)((DataRowView)dgClients.SelectedItems[0]).Row["ID"];
Я специально вспомнил (сбросил) пароль от аккаунта, чтобы написать тебе спасибо. Вот настолько меня этот DataGrid достал уже.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 17
15.12.2023, 07:35 15
Нахождение значения одной выделенной ячейки DataGrid в контексте WPF MVVM
Значение копируем в selectedCellValue
XML
1
2
3
4
 
<DataGrid x:Name="dataGrid" ItemsSource="{Binding MySourceView}" AutoGenerateColumns="False"
           CanUserSortColumns="True" SelectedItem="{Binding SelectedMyItem}" 
            CurrentCell="{Binding SelectedCell, Mode=OneWayToSource}">
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string? selectedCellValue;
FrameworkElement? cellContent;
 
DataGridCellInfo selectedCell;
 
 public DataGridCellInfo SelectedCell
{
    get
    {
        return selectedCell;
    }
    set
    {
        selectedCell=value;
        OnPropertyChanged(nameof(SelectedCell));
        if(selectedCell.Column is not null)
        cellContent = selectedCell.Column.GetCellContent(selectedCell.Item);
        if (cellContent is not null && cellContent is TextBlock)
        selectedCellValue = ((TextBlock)cellContent).Text;
    }
}
0
2310 / 1672 / 327
Регистрация: 14.08.2018
Сообщений: 5,511
Записей в блоге: 4
15.12.2023, 08:30 16
Цитата Сообщение от ppvl132 Посмотреть сообщение
Нахождение значения одной выделенной ячейки DataGrid в контексте WPF MVVM
А SelectedItem в DataGrid не пробовали использовать в VM? И потом просто
C#
1
_myCellValue = MySelectedItem.MyDataField;
Цитата Сообщение от ppvl132 Посмотреть сообщение
в контексте WPF MVVM
Цитата Сообщение от ppvl132 Посмотреть сообщение
DataGridCellInfo selectedCell;
На MVVM чета мало смахивает... Это Code Behind?
1
Модератор
Эксперт .NET
15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,544
Записей в блоге: 2
15.12.2023, 11:55 17
Цитата Сообщение от ppvl132 Посмотреть сообщение
в контексте WPF MVVM
ViewModel должна находится в отдельной сборке (проекте) в которой даже ссылок нет на View типы (DataGridCellInfo, TextBlock).
А разбор визуального дерева в ViewModel... воще, треш.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 17
18.12.2023, 07:49 18
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А SelectedItem в DataGrid не пробовали использовать в VM? И потом просто
C#
1
_myCellValue = MySelectedItem.MyDataField;
У MySelectedItem много свойств, как привязаться к конкретной ячейке, столбцов-то много? По SelectedItem получаем по строке объект из коллекции, а дальше что, какой MyDataField выбрать?


На MVVM чета мало смахивает... Это Code Behind?
View и ViewModel по моим представлениям должны были быть, собственно взял от сюда
https://stackoverflow.com/ques... vm-pattern
0
2310 / 1672 / 327
Регистрация: 14.08.2018
Сообщений: 5,511
Записей в блоге: 4
18.12.2023, 08:36 19
Цитата Сообщение от ppvl132 Посмотреть сообщение
public DataGridCellInfo SelectedCell
Цитата Сообщение от ppvl132 Посмотреть сообщение
FrameworkElement? cellContent;
Цитата Сообщение от ppvl132 Посмотреть сообщение
selectedCellValue = ((TextBlock)cellContent).Text;
В VM не должно быть ссылок на такие классы от слова совсем!
Если нужно получить значение ячейки DataGrid, берёте привязанное к SelectedItem свойство и получаете из него свойство класса, объекты которого находятся в привязанной коллекции ItemsSource.
Если нужно реализовать редактирование DataGrid, то необходимо реализовать IEditableObject для объектов класса, коллекции которых привязаны к DataGrid.
0
0 / 0 / 0
Регистрация: 13.07.2020
Сообщений: 17
18.12.2023, 08:54 20
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
В VM не должно быть ссылок на такие классы от слова совсем!
Если нужно получить значение ячейки DataGrid, берёте привязанное к SelectedItem свойство и получаете из него свойство класса, объекты которого находятся в привязанной коллекции ItemsSource.
Если нужно реализовать редактирование DataGrid, то необходимо реализовать IEditableObject для объектов класса, коллекции которых привязаны к DataGrid.
Мне нужно строковое значение ячейки строки N и столбца M
В вашем решении к SelectedItem привязана вся строка, т.е. элемент коллекции, весь экземпляр класса.
А как найти конкретное свойство класса, которое к столбцу привязано? При выделении конкретной ячейки, а не строки.
То что в VM не должно быть элементов View согласен, но почему тогда на stackoverflow.com предложили такое решение, и другого я не нашел?
0
18.12.2023, 08:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2023, 08:54
Помогаю со студенческими работами здесь

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

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

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

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


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

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