获取DataGrid WPF中的选定行项

Mik*_* B. 59 wpf datagrid selecteditem

我有一个DataGrid,绑定到Database表,我需要获取所选行的内容DataGrid,例如,我想在MessageBox所选行的内容中显示.

示例DataGrid:

在此输入图像描述

所以,如果我选择第二行,我MessageBox必须显示如下内容:646 Jim Biology.

Ale*_*ide 129

您可以使用该SelectedItem属性获取当前选定的对象,然后可以将其强制转换为正确的类型.例如,如果您DataGrid绑定了一组Customer对象,则可以执行以下操作:

Customer customer = (Customer)myDataGrid.SelectedItem;
Run Code Online (Sandbox Code Playgroud)

或者,您可以绑定SelectedItem到您的源类或ViewModel.

<Grid DataContext="MyViewModel">
    <DataGrid ItemsSource="{Binding Path=Customers}"
              SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"/>
</Grid>    
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,第二个也很棒!:) (2认同)
  • 第二个正是我正在寻找的。谢谢! (2认同)

ema*_*ema 18

如果您正在使用MVVM模式,则可以将SelectedRecordVM 的属性与SelectedItemDataGrid绑定,这样您就可以随身携带SelectedValueVM.否则,您应该使用SelectedIndexDataGrid 的属性.


Bah*_*din 12

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 { }
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*ain 5

在这个 DataGrid dg 中这非常简单,项目类填充在 datagrid 中,listblock1 是一个基本框架。

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; }
    }
Run Code Online (Sandbox Code Playgroud)