am试图获取选定行中每个单元格的值,在我弄清楚它出现此异常的方式之后
这是一个例外:
'无法将类型为'<> f__AnonymousType5`3 [System.String,System.String,System.String]'的类型转换为'System.Data.DataRowView'。” var query = (from sc in cd.SubjectTeachers
join s in cd.Subjects on sc.IdSubject equals s.Id
join t in cd.Teachers on sc.IdTeacher equals t.Id
join b in cd.Branches on sc.IdBranch equals b.Id
select new { t.NickName, s.Code, b.TypeOfBranch }).ToList();
PlanDG.ItemsSource = query;
DataRowView dataRow = (DataRowView)PlanDG.SelectedItem;
string cellValue = dataRow.Row.ItemArray[0].ToString();
我想它可以运行,但是它在DataRowView行中运行异常
答案 0 :(得分:2)
SelectedItem将成为您要分配给ItemsSource的LINQ查询中的对象之一。它们不是DataRowViews。它们是匿名类型的实例,您不能转换为匿名类型。
因此,最好的选择是编写一个具有所需三个属性的小类,然后使用它。
public class DGItem {
public String NickName { get; set; }
public String Code { get; set; }
public String TypeOfBranch { get; set; }
}
现在在查询中创建这些对象,而不是匿名对象:
var query = (from sc in cd.SubjectTeachers
join s in cd.Subjects on sc.IdSubject equals s.Id
join t in cd.Teachers on sc.IdTeacher equals t.Id
join b in cd.Branches on sc.IdBranch equals b.Id
select new DGItem {
NickName = t.NickName,
Code = s.Code,
TypeOfBranch = b.TypeOfBranch
}).ToList();
PlanDG.ItemsSource = query;
现在,您可以将SelectedItem转换为适当的类型,并加以利用:
DGItem dataRow = (DGItem)PlanDG.SelectedItem;
string cellValue = dataRow.NickName;