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



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

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

但是我面临以下错误——

"无法强制转换类型为的对象'<>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]'键入"System.Data.DataRowView"。"

当我尝试以下方式时,效果很好-

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

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

SelectedItems列表的内容将是绑定到DataGrid的类型。例如,如果我的代码后台有一个属性ListDataSource,并且我将该列表绑定为数据网格的ItemsSource:

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

网格。SelectedItems将返回一个字符串列表。

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

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

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

我终于找到了我的问题。这是我的SelectedItems的两个值为空。由于这个原因,键值对并没有准备好。下面的代码工作得很好。

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

在我的例子中,row是我的类的一个对象,用于填充ItemsSource。它可以是int或字符串,也可以是ItemsSource 中的任何内容

相关内容

  • 没有找到相关文章

最新更新