从匿名对象中获取值

3

我有一个匿名类型列表在DataGrid中,我需要获取第一个值(EmployeeId),它是一个整数。

当我编译应用程序时,我可以看到变量(selectedEmployee)中的值已经被加载。

像这样:

selectedEmployee = 
{
    EmployeeId = 402350236,
    OperatorNum = 12,
    StateName = "Active",
    Name = "Robert",
    LastName = "Tedd Zelaya",
    Password = "abcd",
    DateBegin = {13/07/2011 0:00:00},
    DateEnd = {23/07/2011 0:00:00},
    Telephone = "8869-2108",
    Address = "Santa Barvara"
    ... 
}

当用户在网格中点击项目时,以下是我的代码。

var selectedEmployee = _employeedataGrid.CurrentCell.Item;

此外,我尝试使用以下方法:
DataRowView dataRowView = _employeedataGrid.CurrentCell.Item as DataRowView;
            var idEmployee = 0;
            if (dataRowView != null) 
            {
                idEmployee = Convert.ToInt32(dataRowView.Row[0]);
            }

但是dataRowView始终为空。不起作用...

我该如何从该对象中获取第一个值?


这些内容有帮助吗?如果有,请接受解决方案。 - cordialgerm
2个回答

4
你的网格中的项不是DataRowView,而是匿名的。你需要使用反射或者使用dynamic
dynamic currentItem = _employeedataGrid.CurrentCell.Item;
int idEmployee = currentItem.EmployeeId;

另一方面,最好使用强类型对象。创建该类或使用元组(或其他)。

0

DataRowView 为空是因为 CurrentCell.Item 是一个匿名类型的对象,而不是 DataRowViewas 运算符将 LHS 强制转换为 RHS 上指定的类型,如果无法强制转换到 RHS,则返回 null。

由于 CurrentCell.Item 是一个匿名类型,您无法将其强制转换以检索 EmployeeId。我建议创建一个具有所需属性的类(称之为 Employee 类),并将您的数据网格绑定到这些 Employees 的集合。然后你可以说

var selectedEmployee = (Employee)_employeedataGrid.CurrentCell.Item;
int? selectedId = selectedEmployee == null? (int?)null : selectedEmployee.EmployeeId;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接