DataGrid получает значения столбцов выбранных строк

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

private void dataGrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { DataGrid dg = sender as DataGrid; Console.WriteLine(dg.SelectedCells[0].ToString()); } 

Но это не работает. Если я сделаю SelectedCells.Count то получаю правильное количество столбцов, но я не могу получить значения этих столбцов в выбранной строке. Я пробовал довольно долго, не повезло! Вот мой XAML:

         

В идеале я бы хотел получить доступ к данным, выполнив что-то вроде rowData.UserID но я не могу его rowData.UserID . Есть много учебников и помощь в использовании DataGridView, но я не использую это.

ОБНОВЛЕНО

Чтобы получить выбранные строки, попробуйте:

 IList rows = dg.SelectedItems; 

Затем вы можете получить значение столбца из элемента строки.

ИЛИ

 DataRowView row = (DataRowView)dg.SelectedItems[0]; 

Затем:

 row["ColumnName"]; 

Я сделал что-то подобное, но я использую привязку для получения выбранного элемента:

            

Поэтому я могу получить доступ к моему SelectedContact.Name в моей модели ViewModel.

Решение, основанное на ответе Тониса:

  DataGrid dg = sender as DataGrid; User row = (User)dg.SelectedItems[0]; Console.WriteLine(row.UserID); 

Я считаю, что нет никакой простой возможности доступа к выбранной строке WPF DataGrid, потому что режим выбора DataGrid может быть установлен как на уровне строк, так и на уровне ячеек. Таким образом, свойства и события, связанные с выбором, все написаны в отношении выбора на уровне клетки – вы всегда будете выбирать ячейки независимо от режима выбора сетки, но у вас не будет гарантированной выборки.

Я не знаю точно, чего вы пытаетесь достичь, обработав событие CellEditEnding, но чтобы получить значения всех выбранных ячеек при выборе строки, обратите внимание на обработку события SelectedCellsChanged . Особо следует отметить замечания в этой статье:

Вы можете обработать событие SelectedCellsChanged, которое будет уведомляться при изменении коллекции выбранных ячеек. Если выбор включает полные строки, также возникает событие Selector.SelectionChanged.

Вы можете получить AddCells и RemovedCells из SelectedCellsChangedEventArgs в обработчике событий.

Надеюсь, это поможет вам на правильном пути. 🙂

Легкий способ работы:

 private void dataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { foreach (var item in e.AddedCells) { var col = item.Column as DataGridColumn; var fc = col.GetCellContent(item.Item); if (fc is CheckBox) { Debug.WriteLine("Values" + (fc as CheckBox).IsChecked); } else if(fc is TextBlock) { Debug.WriteLine("Values" + (fc as TextBlock).Text); } //// Like this for all available types of cells } } 

После нескольких часов поиска способов получения данных из строки, выбранной в элементе управления DataGrid WPF, я использовал MongoDB. Я нашел этот пост и использовал ответ Тони. Я пересмотрел код, чтобы иметь отношение к моему проекту. Может быть, кто-то может использовать это, чтобы получить представление.

 private void selectionChanged(object sender, SelectionChangedEventArgs e) { facultyData row = (facultyData)facultyDataGrid.SelectedItem; facultyID_Textbox.Text = row.facultyID; lastName_TextBox.Text = row.lastName; firstName_TextBox.Text = row.firstName; middleName_TextBox.Text = row.middleName; age_TextBox.Text = row.age.ToString(); } } class facultyData { public ObjectId _id { get; set; } public string facultyID { get; set; } public string acadYear { get; set; } public string program { get; set; } } 

DataGrid получает значения столбцов выбранных строк, к которым может обращаться доступ по нижнему коду. Здесь grid1 – это имя Gride.

 private void Edit_Click(object sender, RoutedEventArgs e) { DataRowView rowview = grid1.SelectedItem as DataRowView; string id = rowview.Row[0].ToString(); } 

Я использовал аналогичный путь для решения этой проблемы, используя sysestion animescm, действительно мы можем получить определенные значения ячеек из группы выбранных ячеек с использованием вспомогательного списка:

 private void dataGridCase_SelectionChanged(object sender, SelectedCellsChangedEventArgs e) { foreach (var item in e.AddedCells) { var col = item.Column as DataGridColumn; var fc = col.GetCellContent(item.Item); lstTxns.Items.Add((fc as TextBlock).Text); } } 
  • Какую структуру для MVVM следует использовать?
  • Стиль кнопки WPF C #
  • Почему я не могу создать стиль DataGridTextColumn?
  • Настройка свойств canvasа в ItemControl DataTemplate
  • Как настроить привязку ширины столбца ColumnDefinition или RowDefinition?
  • Приложение WPF из Visual Studio 2010 выходит из строя Windows 7
  • Доступ к свойствам через параметр Generic type
  • Создание нового пользовательского интерфейса TaskFactory
  • отключить колесо мыши на элементах управления в wpf
  • как использовать MVVMLight SimpleIoc?
  • Проблема с разрешением экрана в WPF?
  • Давайте будем гением компьютера.