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

时间:2016-04-02 10:13:58

标签: c# wpf datagrid datarow datarowview

我是WPF的初学者。我试图用DataRow / DataRowView读取Datagrid选定项。我的代码是 -

$(document).ready(function () {
        $("#Monday").rules('remove', 'range');
        $("#Tuesday").rules('remove', 'range');
        $("#Wednesday").rules('remove', 'range');
        $("#Thursday").rules('remove', 'range');
        $("#Friday").rules('remove', 'range');
        $("#Saturday").rules('remove', 'range');
        $("#Sunday").rules('remove', 'range');
    });

但我面临以下错误 -

  

“无法转换类型的对象   '<> f__AnonymousTypeb foreach (System.Data.DataRowView row in dgDocument.SelectedItems) { txtPhotoIDNo.Text = row["PhotoIdNumber"].ToString(); } 1的System.DateTime],System.String,System.Nullable`1 [System.DateTime的],System.String,System.String]'   输入'System.Data.DataRowView'。“

当我尝试使用以下方式时,这样可以正常工作 -

11[System.String,System.Byte,System.String,System.String,System.String,System.Byte[],System.Nullable

问题是当我需要添加新列/更改datagrid列位置时,我需要更改整个指定值的索引。为了解决这个问题,我想用列名称以上述方式赋值。

3 个答案:

答案 0 :(得分:2)

最后我发现了我的问题。这是我的SelectedItems的两个值为null。因此,键值对不能完美地准备。以下代码完美无缺。

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

答案 1 :(得分:1)

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

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

grid.SelectedItems将返回一个字符串列表。

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

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

你需要替换???使用匿名类中的属性名称,该类包含您要放入txtPhotoIDNo的数据。

答案 2 :(得分:0)

 foreach (dynamic row in dgBarDetails.ItemsSource)
 { 
  myList.Add(row);
 }

在我的情况下,row是我的类的一个对象,用于填充ItemsSource。它可以是int或字符串,也可以是ItemsSource

中的任何内容