【问题标题】:Not able to get selected row values from DataGrid无法从 DataGrid 中获取选定的行值
【发布时间】:2018-07-11 08:06:52
【问题描述】:

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

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

【问题讨论】:

  • 在我看来不像 DataRowView 对象。更像是匿名类型对象
  • 也许这会有所帮助:stackoverflow.com/questions/8372464/…
  • 我已经尝试了很多,但一切都是徒劳的。尽管相同的代码行以相同的方式在另一个文件中工作。
  • 这不是一个完全相同的方式,如果它不起作用的话。一定有区别
  • 我基本上希望当点击数据网格行时,它的特定单元格值应该显示在标签中。就像我在我的代码中所做的那样。

标签: c# .net wpf datagrid


【解决方案1】:

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 });
}

【讨论】:

  • 一个小问题是我认为此代码不适用于 button_onclick 事件
  • 在 Button.Click 事件处理程序中,sender 将是 Button。您可以按名称访问标签 (label16),因此给 DataGrid 一个名称 (<DataGrid Name="someDataGrid"/>),您将能够在代码隐藏中的任何位置使用 someDataGrid.SelectedItem
  • @JahanzaibNiazi,+3 不是负面声誉。要求投票是不道德的。请记住,Q 和 A 因其质量和实用性而获得赞成票,而未表现出研究努力的 Q 则被否决
猜你喜欢
  • 2012-11-11
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2011-07-04
  • 2016-08-11
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多