无法在 WPF 中将 AnonymousType 类型的对象转换为 System.Data.DataRowView

Unable to cast object of type AnonymousType To System.Data.DataRowView in WPF

我是 WPF 初学者。我正在尝试使用 DataRow/DataRowView 读取 Datagrid 选定项。我的代码如下--

foreach (System.Data.DataRowView row in dgDocument.SelectedItems)
  {
    txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString();
  }

但我遇到了以下错误--

"Unable to cast object of type '<>f__AnonymousTypeb11[System.String,System.Byte,System.String,System.String,System.String,System.Byte[],System.Nullable1[System.DateTime],System.String,System.Nullable`1[System.DateTime],System.String,System.String]' to type 'System.Data.DataRowView'."

当我尝试使用以下方法时,效果很好-

(dgDocument.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text;

问题是当我需要添加新的 column/change 数据网格列位置时,我需要更改整个分配值的索引。为了解决这个问题,我想用上面提到的方法给列 Name 赋值。

SelectedItems 列表的内容将是绑定到您的 DataGrid 的类型。因此,例如,如果我的代码隐藏中有一个 属性 List DataSource,并且我将此列表绑定为数据网格的 ItemsSource:

<DataGrid x:Name="grid" ItemsSource={Binding DataSource) />

grid.SelectedItems 会 return 给我一个字符串列表。

在您的情况下,DataGrid 的 ItemsSource 绑定到某种匿名类型。虽然我通常不鼓励在这种特殊情况下使用匿名类型,但您的解决方法如下:

foreach (dynamic item in dgDocument.SelectedItems)
  {
    txtPhotoIDNo.Text = Convert.ToString(item.???);
  }

您需要替换 ???使用来自匿名 class 的 属性 的名称,其中包含您要放入 txtPhotoIDNo.

的数据

我终于找到了我的问题。那就是我的 SelectedItems 的两个值是 null.For 这就是键值对没有完美准备的原因。以下代码完美运行。

foreach (System.Data.DataRowView row in dgDocument.SelectedItems)
  {
    txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString();
  }
 foreach (dynamic row in dgBarDetails.ItemsSource)
 { 
  myList.Add(row);
 }

在我的案例中,行是我的 class 的一个对象,用于填充 ItemsSource。它可以是 int 或 string 或者你在 ItemsSource

中的任何东西