1.使用报表设计器添加你要的记录集和标题行/内容行等内容
2.加载时 GridppReport _subReport = new GridppReport();创建个报表对象
3.
创建个构造类
private struct MatchFieldPairType
{
public IGRField grField;
public int MatchColumnIndex;
}
4.加载报表文件并添加个FetchRecord 事件
_subReport.LoadFromFile(Common.GetPath(@"Html/Logistics/Report/ProductList.grf"));
_subReport.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(_subReport_FetchRecord);
5.在(_subReport_FetchRecord方法里调用下面的方法
6.
这个类是将
dataTable添加到记录集里
// 将 DataTable 的数据转储到 Grid++Report 的数据集中
public static void FillRecordToReport(IGridppReport Report, DataTable dt)
{
MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)];
//根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系
int MatchFieldCount = 0;
for (int i = 0; i < dt.Columns.Count; ++i)
{
foreach (IGRField fld in Report.DetailGrid.Recordset.Fields)
{
if (String.Compare(fld.Name, dt.Columns[i].ColumnName, true) == 0)
{
MatchFieldPairs[MatchFieldCount].grField = fld;
MatchFieldPairs[MatchFieldCount].MatchColumnIndex = i;
++MatchFieldCount;
break;
}
}
}
// 将 DataTable 中的每一条记录转储到 Grid++Report 的数据集中去
foreach (DataRow dr in dt.Rows)
{
Report.DetailGrid.Recordset.Append();
for (int i = 0; i < MatchFieldCount; ++i)
{
if (!dr.IsNull(MatchFieldPairs[i].MatchColumnIndex))
MatchFieldPairs[i].grField.Value = dr[MatchFieldPairs[i].MatchColumnIndex];
}
Report.DetailGrid.Recordset.Post();
}
}
7.这样即可动态添加信息到页面!