wpf datagrid selecteditem

Obtener elemento de fila seleccionado en DataGrid WPF



selecteditem (11)

Acabo de descubrir este después de probar la respuesta de Fara, pero no funcionó en mi proyecto. Simplemente arrastre la columna desde la ventana Orígenes de datos y suéltela en la etiqueta o en el cuadro de texto.

Tengo un DataGrid , vinculado a la tabla de la base de datos, necesito obtener el contenido de la fila seleccionada en DataGrid, por ejemplo, quiero mostrar en el contenido de MessageBox de la fila seleccionada.

Ejemplo de DataGrid :

Entonces, si selecciono la segunda fila, mi MessageBox tiene que mostrar algo como: 646 Jim Biology .


Bueno, pondré una solución similar que funciona bien para mí.

private void DataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (DataGrid1.SelectedItem != null) { if (DataGrid1.SelectedItem is YouCustomClass) { var row = (YouCustomClass)DataGrid1.SelectedItem; if (row != null) { // Do something... // ButtonSaveData.IsEnabled = true; // LabelName.Content = row.Name; } } } } catch (Exception) { } }


Esto es bastante simple en este DataGrid dg y la clase de elemento se llena en datagrid y listblock1 es un marco básico.

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { var row_list = (Item)dg.SelectedItem; listblock1.Content = "You Selected: " + row_list.FirstName + " " + row_list.LastName; } catch { } } public class Item { public string FirstName { get; set; } public string LastName { get; set; } }


Puede usar la propiedad SelectedItem para obtener el objeto seleccionado actualmente, que luego puede convertir en el tipo correcto. Por ejemplo, si su DataGrid está vinculada a una colección de objetos del Cliente, puede hacer esto:

Customer customer = (Customer)myDataGrid.SelectedItem;

Alternativamente, puede vincular SelectedItem a su clase fuente o ViewModel.

<Grid DataContext="MyViewModel"> <DataGrid ItemsSource="{Binding Path=Customers}" SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"/> </Grid>


Respuesta @Krytox con MVVM

<DataGrid Grid.Column="1" Grid.Row="1" Margin="10" Grid.RowSpan="2" ItemsSource="{Binding Data_Table}" SelectedItem="{Binding Select_Request, Mode=TwoWay}" SelectionChanged="DataGrid_SelectionChanged"/>//The binding #region View Model private DataRowView select_request; public DataRowView Select_Request { get { return select_request; } set { select_request = value; OnPropertyChanged("Select_Request"); //INotifyPropertyChange OnSelect_RequestChange();//do stuff } }


Si está utilizando el patrón MVVM, puede vincular una propiedad SelectedRecord de su máquina virtual con SelectedItem de DataGrid, de esta manera siempre tendrá SelectedValue en su máquina virtual. De lo contrario, debe usar la propiedad SelectedIndex de DataGrid.


Tú también puedes:

DataRowView row = dataGrid.SelectedItem as DataRowView; MessageBox.Show(row.Row.ItemArray[1].ToString());


si selecciono la segunda fila -

Dim jason As DataRowView jason = dg1.SelectedItem noteText.Text = jason.Item(0).ToString()

noteText será 646. Esto es VB, pero lo obtienes.


use su clase Model para obtener los valores de fila seleccionados de la cuadrícula de datos, como

XDocument xmlDoc = XDocument.Load(filepath); if (tablet_DG.SelectedValue == null) { MessageBox.Show("select any record from list..!", "select atleast one record", MessageBoxButton.OKCancel, MessageBoxImage.Warning); } else { try { string tabletID = ""; /*here i have used my model class named as TabletMode*/ var row_list = (TabletModel)tablet_DG.SelectedItem; tabletID= row_list.TabletID; var items = from item in xmlDoc.Descendants("Tablet") where item.Element("TabletID").Value == tabletID select item; foreach (var item in items) { item.SetElementValue("Instance",row_list.Instance); item.SetElementValue("Database",row_list.Database); } xmlDoc.Save(filepath); MessageBox.Show("Details Updated..!" + Environment.NewLine + "TabletId: " +row_list.TabletID + Environment.NewLine + "Instance:" + row_list.Instance + Environment.NewLine + "Database:" + row_list.Database, "", MessageBoxButton.YesNoCancel, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show(ex.StackTrace); } }


private void Fetching_Record_Grid_MouseDoubleClick_1(object sender, MouseButtonEventArgs e) { IInputElement element = e.MouseDevice.DirectlyOver; if (element != null && element is FrameworkElement) { if (((FrameworkElement)element).Parent is DataGridCell) { var grid = sender as DataGrid; if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1) { //var rowView = grid.SelectedItem as DataRowView; try { Station station = (Station)grid.SelectedItem; id_txt.Text = station.StationID.Trim() ; description_txt.Text = station.Description.Trim(); } catch { } } } } }


public IEnumerable<DataGridRow> GetDataGridRows(DataGrid grid) { var itemsSource = grid.ItemsSource as IEnumerable; if (null == itemsSource) yield return null; foreach (var item in itemsSource) { var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; if (null != row) yield return row; } } private void DataGrid_Details_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { var row_list = GetDataGridRows(DataGrid_Details); foreach (DataGridRow single_row in row_lis) { if (single_row.IsSelected == true) { MessageBox.Show("the row no."+single_row .GetIndex ().ToString ()+ " is selected!"); } } } catch { } }