首页 > 解决方案 > 无法从 DataGrid 中获取选定的行值

问题描述

我在下面写了从选定行特定的单元格值中获取值。但它不起作用。我已经尝试了很多,尽管相同的代码在我的项目其他页面中工作。下面是代码,这里是堆栈跟踪:

在此处输入图像描述

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
      DataGrid gd = (DataGrid)sender;
      DataRowView rowSelected = gd.SelectedItem as DataRowView;
      label16.Content = Convert.ToString(rowSelected["quantity"]);
}  

标签: c#.netwpfdatagrid

解决方案


gd.SelectedItem不是 DataRowView,因为类型转换后rowSelectednull. 很可能它是匿名类型对象(例如,如果 ItemsSource 是从 Entity Framework 查询结果中设置的)

除非您将 ItemsSource 类型更改为 DataView,否则我可以推荐 2 个选项:

使用dynamic类型:

private void dg_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataGrid gd = (DataGrid)sender;
    dynamic rowSelected = gd.SelectedItem;
    label16.Content = rowSelected.quantity;
}

使用绑定:

private void dg_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataGrid gd = (DataGrid)sender;

    BindingOperations.SetBinding(label16, Label.ContentProperty, new Binding("quantity") { Source = gd.SelectedItem });
}

推荐阅读