无法在 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.Nullable
1[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
中的任何东西
我是 WPF 初学者。我正在尝试使用 DataRow/DataRowView 读取 Datagrid 选定项。我的代码如下--
foreach (System.Data.DataRowView row in dgDocument.SelectedItems)
{
txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString();
}
但我遇到了以下错误--
"Unable to cast object of type '<>f__AnonymousTypeb
11[System.String,System.Byte,System.String,System.String,System.String,System.Byte[],System.Nullable
1[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
中的任何东西