You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#如何获取DataGrid选中行值显示到TextBox,转DataRowView为空怎么办

原因分析
  • 类型不匹配:as运算符在类型转换失败时会直接返回null,此问题90%以上的场景都是因为DataGrid的ItemsSource绑定的数据源类型不是DataView/DataTable:如果你的数据源是List<自定义业务类>、ObservableCollection<T>这类泛型集合,SelectedItem的实际类型就是泛型对应的实体类,自然无法转换为DataRowView。
  • 选中状态为空:触发SelectionChanged事件时可能没有处于有效选中状态,比如页面首次加载未选中任何行、点击DataGrid空白区域取消选中、开启多选模式后全部取消选中时,SelectedItem本身就是null,转换后自然也是null。
  • 强类型DataSet适配问题:如果使用强类型DataSet作为数据源,选中项的类型是强类型DataRow而非DataRowView,转换也会失败。
解决方法
  1. 先调试确认SelectedItem的实际类型:在第4行打断点,查看grid.SelectedItem的运行时类型,根据实际类型做转换即可。
  2. 如果是绑定的自定义实体类(例如类名为Product),直接修改转换逻辑:
private void dataGridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataGrid grid = (DataGrid)sender;
    Product selectedProduct = grid.SelectedItem as Product;
    if (selectedProduct != null)
    {
        comboBoxCategory.Text = selectedProduct.Category;
        textBoxBrand.Text = selectedProduct.Brand;
        textBoxName.Text = selectedProduct.Name;
        textBoxCount.Text = selectedProduct.Count.ToString();
        textBoxPrice.Text = selectedProduct.Price.ToString();
    }
}
  1. 如果确认要绑定DataTable并使用DataRowView,请确保给DataGrid赋值数据源时写法正确:
// 正确写法,显式指定用DataView绑定
dataGrid.ItemsSource = yourDataTable.DefaultView;
  1. 无需删除现有if (selected_row != null)判断,这个判断可以避免未选中行时的空引用报错。

内容的提问来源于stack exchange,提问作者Futurex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:36:03