我们如何从List< Entity>绑定RDLC报告? ? [英] How can we bind RDLC report from List<Entity> ?
问题描述
您好,
我需要制作一份具有一对多关系概念的RDLC报告。
假设我们有产品和他们的差异。和一个方法GetProdctList()返回产品列表。
现在需要绑定报告。
这是班级:
public class产品
{
public INT ProdId {get; set ;}
public string名称{get; set ;}
public 列表< Variance> ProductVariance {get; set ;}
}
public class差异
{
public INT ProdId {get; set ;}
public string颜色{get; set ;};
}
如何实施呢请告诉我你的看法?我试过但在报告设计时我无法从同一个数据集访问variance的成员。
注意:从前端只有可用的产品列表。 />
谢谢,
Padam
As我在评论中提到你没有提供足够的信息。然而......
您可以使用 Linq [ ^ ]获取产品清单及其外观。看看例子:
// 类定义:
public class 方差
{
private int pid = 0 跨度>;
private string c = string .Empty;
public 方差( int _pid, string _c)
{
pid = _pid;
c = _c;
}
public int ProdId
{
get { return pid;}
set {pid = value ;}
}
public string 颜色
{
get { return c;}
set {c = value ;}
}
}
public class 产品
{
private int pid = 0 < /跨度>;
private string sname = string .Empty;
private 列表< Variance> cvariances = null ;
public 产品( int _pid, string _sname,List< Variance> _cvariances)
{
pid = _pid;
sname = _sname;
cvariances = _cvariances;
}
public int ProdId
{
get { return pid;}
set {pid = value ;}
}
public string 名称
{
get { return sname;}
set {sname = value ;}
}
public 列表< Variance> ProductVariances
{
get { return cvariances;}
set {cvariances = value ;}
}
}
// 主程序:
List< product> products = new 列表< product>()
{
new 产品(< span class =code-digit> 1 , GummiBear, new 列表< variance>()
{
新方差( 1 , black),
new 方差( 1 , red),
new 方差( 1 , white)
}),
新产品( 2 , CellPhone, new 列表< variance>()
{
new 方差( 2 , blue),
new 方差( 2 , gold)
})
};
DataTable dt = new DataTable();
DataColumn dc = new DataColumn( ProdId ,Type.GetType( System.Int32));
dt.Columns.Add(dc);
dc = new DataColumn( 名称 ,Type.GetType( System.String));
dt.Columns.Add(dc);
dc = new DataColumn( Color ,Type.GetType( System.String));
dt.Columns.Add(dc);
var result = 来自 v in products.SelectMany(p => p.ProductVariances.Select(pv => pv))
join p 产品中的code-keyword>等于p.ProdId
选择 new object []
{
p.ProdId,
p.Name,
v.Color
};
// fill datatable
foreach ( var r in result)
{
dt。 Rows.Add(R);
}
// 待办事项:
// 使用datatable作为rdlc报告的数据源
结果:
<前lang =文字> 产品名称颜色
1 GummiBear black
1 GummiBear red
1 GummiBear white
2 CellPhone blue
2 CellPhone gold
注意:类的定义已经改变。
您可以使用 CopyToDataTable扩展方法 [ ^ ]以更简单的方式创建DataTable
对象。
Hello,
I need to make a RDLC report that has concept like one-many relationship.
Suppose we have Product and their variances. and one method GetProdctList() which returning product list.
Now Need to bind report.
Here is the class :
public class Product
{
public INT ProdId {get;set;}
public string Name {get;set;}
public List<Variance> ProductVariance {get;set;}
}
public class Variance
{
public INT ProdId {get;set;}
public string Color {get;set;};
}
How can I implement it Please let me know your view? I tried but at the time of report design I am unable to access variance's members from the same Dataset.
Note : From front end only List of Products available.
Thanks,
Padam
As i mentioned in the comment to the question you did not provide enough information. Nevertheless...
You can use Linq[^] to get the list of products and its varances. Have a look at example:
//class definition: public class Variance { private int pid = 0; private string c = string.Empty; public Variance(int _pid, string _c) { pid = _pid; c = _c; } public int ProdId { get{return pid;} set{pid = value;} } public string Color { get{return c;} set{c = value;} } } public class Product { private int pid = 0; private string sname = string.Empty; private List<Variance> cvariances = null; public Product(int _pid, string _sname, List<Variance> _cvariances) { pid = _pid; sname = _sname; cvariances = _cvariances; } public int ProdId { get{return pid;} set{pid = value;} } public string Name { get{return sname;} set{sname = value;} } public List<Variance> ProductVariances { get{return cvariances;} set{cvariances = value;} } } //main program: List<product> products = new List<product>() { new Product(1, "GummiBear", new List<variance>() { new Variance(1, "black"), new Variance(1, "red"), new Variance(1, "white") }), new Product(2, "CellPhone", new List<variance>() { new Variance(2, "blue"), new Variance(2, "gold") }) }; DataTable dt = new DataTable(); DataColumn dc = new DataColumn("ProdId", Type.GetType("System.Int32")); dt.Columns.Add(dc); dc = new DataColumn("Name", Type.GetType("System.String")); dt.Columns.Add(dc); dc = new DataColumn("Color", Type.GetType("System.String")); dt.Columns.Add(dc); var result = from v in products.SelectMany(p=>p.ProductVariances.Select(pv=>pv)) join p in products on v.ProdId equals p.ProdId select new object[] { p.ProdId, p.Name, v.Color }; //fill datatable foreach (var r in result) { dt.Rows.Add(r); } //TO DO: //use datatable as a datasource for rdlc report
Result:
ProdId Name Color 1 GummiBear black 1 GummiBear red 1 GummiBear white 2 CellPhone blue 2 CellPhone gold
Note: the definition of classes has been changed.
You can use CopyToDataTable extension method[^] to createDataTable
object in simpler manner.
这篇关于我们如何从List< Entity>绑定RDLC报告? ?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!