Visual Studio 2013 Rdlc - 如何显示导航属性的值
Visual Studio 2013 Rdlc - how to display values from navigation properties
我正在 visual studio 2013 年使用实体框架(代码优先)构建 WPF 应用程序。
我有一个订单 class,其中有一个虚拟 属性 客户。
public class Order
{
public int OrderId { get; set; }
public DateTime OrderDate { get; set;}
public virtual Customer Customer { get; set; }
}
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
public string DocumentNumber { get; set; }
public DateTime BirthDate { get; set; }
}
我正在尝试在报告公式中显示客户的姓名。我试过:
=第一(字段!Customer.Value.Name,"MyDataSet")
=第一(字段!Customer.Name.Value,"MyDataSet")
和
=字段!Customer.Value.Name
=字段!Customer.Name.Value
它只是在该字段上显示#Error。订单中的其他字段显示正确。
有效:
=第一(字段!OrderDate.Value,"MyDataSet")
我在从上下文中检索实体时使用 Include 加载了 Customer。所以空引用不是问题。
Order order = context.Orders.Include(o => o.Customer).Where(o => o.OrderID == id).FirstOrDefault();
我搜索了以下内容和其他内容,但听起来像是只适用于 visual studio 2010 年或根本不起作用:
Bind child object property with in rdlc (Report)
http://wraithnath.blogspot.com.br/2011/04/reportviewer-object-datasource-nested.html
有没有什么我没有做的,或者我应该用另一种方式来解决这个问题,比如某种 "code-first-view"?
我不确定这是否是执行此类操作的公认标准,但我发现这是最可靠的。 (VS Rdlc 工作被窃听到地狱并且在 wpf 领域没有很好的记录)
因此,您拥有 'Order' 对象的数据集,其中包含您尝试从中访问属性的客户对象。现在,创建 'Customer' 对象的另一个数据集。
然后在代码中,像往常一样用所有内容填充 'Order' 对象,然后将我们基于 'Customer' 对象创建的第二个数据集的绑定源设置为 'Customer' 对象在你的 'Order' 对象
中
Order order = new Order();
order.OrderId = 1;
order.OrderDate = DateTime.Now;
order.Customer = new Customer("John", "Shmoe");
OrderBindingDataSet.DataSource = order;
CustomerBindingDataSet.DataSource = order.Customer;
希望这会有所帮助,我从个人经验中知道,必须使用这件作品以及几乎没有这些东西的文档是多么令人恼火。 :)
这个答案在 VS2013 中对我有用:
http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html
确保你class满足要求,记住添加无参数构造函数,(它只对我有用,直到我添加无参数构造函数)
清单:
- 所有 class 都是可序列化的(class 中的每个用户类型都必须是
可序列化,并且用户类型 属性 中的任何用户类型都必须是
可序列化)
- 所有 classes 都有一个 public 无参数构造函数
报告中使用的 - ALLclasses 必须具有 public 修饰符
- 如果数据源的任何 属性,或 属性 的任何 属性 不能
序列化然后你会得到#Error。只要确保一切
可序列化
- 确保不会出现无限递归问题,例如,class A 有一个
属性 of class B,class B 有 属性 of class A。使用 XMLIgnore / ScriptIgnore 属性
这是我的 classes:
[Serializable]
public class Person
{
public Person()
{
}
public string Name{ get; set; }
public string Address1{ get; set; }
public string Id{ get; set; }
public string Phone { get; set; }
}
家长:
[Serializable]
public class Header
{
public Header()
{
}
public string Product { get; set; }
public DateTime EmisionDate{ get; set; }
public string Number { get; set; }
public Person Person { get; set; }
}
这是我的表情
=First(Fields!Person.Value.Name, "dsHeader")
我正在 visual studio 2013 年使用实体框架(代码优先)构建 WPF 应用程序。
我有一个订单 class,其中有一个虚拟 属性 客户。
public class Order
{
public int OrderId { get; set; }
public DateTime OrderDate { get; set;}
public virtual Customer Customer { get; set; }
}
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
public string DocumentNumber { get; set; }
public DateTime BirthDate { get; set; }
}
我正在尝试在报告公式中显示客户的姓名。我试过:
=第一(字段!Customer.Value.Name,"MyDataSet")
=第一(字段!Customer.Name.Value,"MyDataSet")
和
=字段!Customer.Value.Name
=字段!Customer.Name.Value
它只是在该字段上显示#Error。订单中的其他字段显示正确。
有效:
=第一(字段!OrderDate.Value,"MyDataSet")
我在从上下文中检索实体时使用 Include 加载了 Customer。所以空引用不是问题。
Order order = context.Orders.Include(o => o.Customer).Where(o => o.OrderID == id).FirstOrDefault();
我搜索了以下内容和其他内容,但听起来像是只适用于 visual studio 2010 年或根本不起作用:
Bind child object property with in rdlc (Report)
http://wraithnath.blogspot.com.br/2011/04/reportviewer-object-datasource-nested.html
有没有什么我没有做的,或者我应该用另一种方式来解决这个问题,比如某种 "code-first-view"?
我不确定这是否是执行此类操作的公认标准,但我发现这是最可靠的。 (VS Rdlc 工作被窃听到地狱并且在 wpf 领域没有很好的记录)
因此,您拥有 'Order' 对象的数据集,其中包含您尝试从中访问属性的客户对象。现在,创建 'Customer' 对象的另一个数据集。
然后在代码中,像往常一样用所有内容填充 'Order' 对象,然后将我们基于 'Customer' 对象创建的第二个数据集的绑定源设置为 'Customer' 对象在你的 'Order' 对象
中Order order = new Order();
order.OrderId = 1;
order.OrderDate = DateTime.Now;
order.Customer = new Customer("John", "Shmoe");
OrderBindingDataSet.DataSource = order;
CustomerBindingDataSet.DataSource = order.Customer;
希望这会有所帮助,我从个人经验中知道,必须使用这件作品以及几乎没有这些东西的文档是多么令人恼火。 :)
这个答案在 VS2013 中对我有用:
http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html
确保你class满足要求,记住添加无参数构造函数,(它只对我有用,直到我添加无参数构造函数)
清单:
- 所有 class 都是可序列化的(class 中的每个用户类型都必须是 可序列化,并且用户类型 属性 中的任何用户类型都必须是 可序列化)
- 所有 classes 都有一个 public 无参数构造函数 报告中使用的
- ALLclasses 必须具有 public 修饰符
- 如果数据源的任何 属性,或 属性 的任何 属性 不能 序列化然后你会得到#Error。只要确保一切 可序列化
- 确保不会出现无限递归问题,例如,class A 有一个 属性 of class B,class B 有 属性 of class A。使用 XMLIgnore / ScriptIgnore 属性
这是我的 classes:
[Serializable]
public class Person
{
public Person()
{
}
public string Name{ get; set; }
public string Address1{ get; set; }
public string Id{ get; set; }
public string Phone { get; set; }
}
家长:
[Serializable]
public class Header
{
public Header()
{
}
public string Product { get; set; }
public DateTime EmisionDate{ get; set; }
public string Number { get; set; }
public Person Person { get; set; }
}
这是我的表情
=First(Fields!Person.Value.Name, "dsHeader")