我是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 中的任何内容