C#页面代码
if (!IsPostBack)
{
DataTable dt = DataEnt.QueryData.GetData();
dt.TableName = "tableName";
Hashtable hastab = new Hashtable();
hastab.Add("ID", "ID");
hastab.Add("MENT_CODE", "MENT_CODE");
hastab.Add("DB_VALUE", "DB_VALUE");
hastab.Add("CH_NAME", "CH_NAME");
hastab.Add("MENT_TYPE", "MENT_TYPE"); ReportViewer1.Reset();
this.ReportViewer1.LocalReport.LoadReportDefinition(CreateReportXmlObject.GenerateRdlc(dt, hastab));
ReportViewer1.LocalReport.DataSources.Clear();
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource(dt.TableName, dt)); //this.ReportViewer1.LocalReport.Refresh();
}
生成报表代码
public static MemoryStream GenerateRdlc(DataTable sourceDataTable, Hashtable heardCHName)
{
string Font = "宋体";
string detailFontSize = "2pt";
string headerFontSize = "3pt";
string width = "9.35cm"; XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "InitReportXml.xml");
XmlNode xn = doc.GetElementsByTagName("DataSource")[0];//获取DataSource节点
xn.Attributes["Name"].Value = "DummyDataSource";//设置属性Name为DummyDataSource xn = doc.GetElementsByTagName("rd:DataSourceID")[0];//rd:DataSourceID节点
xn.InnerText = Guid.NewGuid().ToString();//只是节点文本为GUID xn = doc.GetElementsByTagName("rd:ReportID")[0];//获取到rd:ReportID节点
xn.InnerText = Guid.NewGuid().ToString(); XmlNode dsElement = doc.GetElementsByTagName("DataSet")[0];//获取DataSet并赋值属性Name
dsElement.Attributes["Name"].Value = sourceDataTable.TableName; XmlNode dsnElement = doc.GetElementsByTagName("DataSourceName")[0];
dsnElement.InnerText = "DummyDataSource"; XmlNode dsNameElement = doc.GetElementsByTagName("rd:DataSetName")[0];
dsNameElement.InnerText = "DataSet1"; XmlNode tbNameElement = doc.GetElementsByTagName("rd:TableName")[0];
tbNameElement.InnerText = "DataSet1" + sourceDataTable.TableName; XmlNode tableElement = doc.GetElementsByTagName("Table")[0];
tableElement.Attributes["Name"].Value = "table"+sourceDataTable.TableName; XmlNode tableDsNameElement = doc.GetElementsByTagName("DataSetName")[0];//设置table 的DataSetName
tableDsNameElement.InnerText = sourceDataTable.TableName; #region 报表主体设置 //获取Details\TableRows\TableRow\TableCells
XmlNode detailsTableCellsNode = doc.GetElementsByTagName("Details")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; //获取Header\TableRows\TableRow\TableCells
XmlNode headerTableCellsNode = doc.GetElementsByTagName("Header")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; //获取TableColumns
XmlNode tableColumnsNode = doc.GetElementsByTagName("TableColumns")[0]; //获取Footer\TableRows\TableRow\TableCells
XmlNode footerTableCellsNode = doc.GetElementsByTagName("Footer")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; XmlNode fieldsElement = doc.GetElementsByTagName("Fields")[0];
foreach (DataColumn col in sourceDataTable.Columns)
{
#region 添加DataSet和添加DataSet字段信息
XmlElement fieldElement = doc.CreateElement("Field");
fieldElement.SetAttribute("Name", col.ColumnName);
fieldsElement.AppendChild(fieldElement); XmlElement dataFieldElement = doc.CreateElement("DataField");
dataFieldElement.InnerText = col.ColumnName;
fieldElement.AppendChild(dataFieldElement); XmlElement typeNameElement = doc.CreateElement("rd:TypeName");
typeNameElement.InnerText = col.DataType.ToString();
fieldElement.AppendChild(typeNameElement);
#endregion #region Detail
XmlElement detailTableCell = doc.CreateElement("TableCell");
detailsTableCellsNode.AppendChild(detailTableCell); XmlElement detailReportItems = doc.CreateElement("ReportItems");
detailTableCell.AppendChild(detailReportItems); XmlElement detailTextbox = doc.CreateElement("Textbox");
detailTextbox.SetAttribute("Name", col.ColumnName);
detailReportItems.AppendChild(detailTextbox); XmlElement detailDefaultName = doc.CreateElement("rd:DefaultName");
detailDefaultName.InnerText = col.ColumnName;
detailTextbox.AppendChild(detailDefaultName);
XmlElement detailCanGrow = doc.CreateElement("CanGrow");
detailCanGrow.InnerText = "true";
detailTextbox.AppendChild(detailCanGrow); XmlElement detailValue = doc.CreateElement("Value");
detailValue.InnerText = "=Fields!"+col.ColumnName+".Value";
detailTextbox.AppendChild(detailValue);
#endregion #region HEADER
XmlElement headerTableCell = doc.CreateElement("TableCell");
headerTableCellsNode.AppendChild(headerTableCell); XmlElement headerReportItems = doc.CreateElement("ReportItems");
headerTableCell.AppendChild(headerReportItems); XmlElement headerTextbox = doc.CreateElement("Textbox");
headerTextbox.SetAttribute("Name", col.ColumnName + "1");
headerReportItems.AppendChild(headerTextbox); XmlElement headerDefaultName = doc.CreateElement("rd:DefaultName");
headerDefaultName.InnerText = col.ColumnName+"1";
headerTextbox.AppendChild(headerDefaultName);
XmlElement headerCanGrow = doc.CreateElement("CanGrow");
headerCanGrow.InnerText = "true";
headerTextbox.AppendChild(headerCanGrow); XmlElement headerValue = doc.CreateElement("Value");
headerValue.InnerText = heardCHName[col.ColumnName].ToString();
headerTextbox.AppendChild(headerValue);
#endregion #region tableColumn
XmlElement tableColumn = doc.CreateElement("TableColumn");
tableColumnsNode.AppendChild(tableColumn);
XmlElement Width = doc.CreateElement("Width");
Width.InnerText = width;
tableColumn.AppendChild(Width);
#endregion XmlElement footerTableCell = doc.CreateElement("TableCell");
footerTableCellsNode.AppendChild(footerTableCell); XmlElement footerReportItems = doc.CreateElement("ReportItems");
footerTableCell.AppendChild(footerReportItems); XmlElement footerTextbox = doc.CreateElement("Textbox");
footerTextbox.SetAttribute("Name", col.ColumnName + "2");
footerReportItems.AppendChild(footerTextbox); XmlElement footerDefaultName = doc.CreateElement("rd:DefaultName");
footerDefaultName.InnerText = col.ColumnName+"2";
footerTextbox.AppendChild(footerDefaultName); XmlElement footerCanGrow = doc.CreateElement("CanGrow");
footerCanGrow.InnerText = "true";
footerTextbox.AppendChild(footerCanGrow); XmlElement footerValue = doc.CreateElement("Value");
footerTextbox.AppendChild(footerValue);
} MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(XmlDocument));
serializer.Serialize(ms, doc);
ms.Position = 0;
string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";
doc.Save(path);
return ms; #endregion
}
if (!IsPostBack)
{
DataTable dt = DataEnt.QueryData.GetData();
dt.TableName = "tableName";
Hashtable hastab = new Hashtable();
hastab.Add("ID", "ID");
hastab.Add("MENT_CODE", "MENT_CODE");
hastab.Add("DB_VALUE", "DB_VALUE");
hastab.Add("CH_NAME", "CH_NAME");
hastab.Add("MENT_TYPE", "MENT_TYPE"); ReportViewer1.Reset();
this.ReportViewer1.LocalReport.LoadReportDefinition(CreateReportXmlObject.GenerateRdlc(dt, hastab));
ReportViewer1.LocalReport.DataSources.Clear();
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource(dt.TableName, dt)); //this.ReportViewer1.LocalReport.Refresh();
}
生成报表代码
public static MemoryStream GenerateRdlc(DataTable sourceDataTable, Hashtable heardCHName)
{
string Font = "宋体";
string detailFontSize = "2pt";
string headerFontSize = "3pt";
string width = "9.35cm"; XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "InitReportXml.xml");
XmlNode xn = doc.GetElementsByTagName("DataSource")[0];//获取DataSource节点
xn.Attributes["Name"].Value = "DummyDataSource";//设置属性Name为DummyDataSource xn = doc.GetElementsByTagName("rd:DataSourceID")[0];//rd:DataSourceID节点
xn.InnerText = Guid.NewGuid().ToString();//只是节点文本为GUID xn = doc.GetElementsByTagName("rd:ReportID")[0];//获取到rd:ReportID节点
xn.InnerText = Guid.NewGuid().ToString(); XmlNode dsElement = doc.GetElementsByTagName("DataSet")[0];//获取DataSet并赋值属性Name
dsElement.Attributes["Name"].Value = sourceDataTable.TableName; XmlNode dsnElement = doc.GetElementsByTagName("DataSourceName")[0];
dsnElement.InnerText = "DummyDataSource"; XmlNode dsNameElement = doc.GetElementsByTagName("rd:DataSetName")[0];
dsNameElement.InnerText = "DataSet1"; XmlNode tbNameElement = doc.GetElementsByTagName("rd:TableName")[0];
tbNameElement.InnerText = "DataSet1" + sourceDataTable.TableName; XmlNode tableElement = doc.GetElementsByTagName("Table")[0];
tableElement.Attributes["Name"].Value = "table"+sourceDataTable.TableName; XmlNode tableDsNameElement = doc.GetElementsByTagName("DataSetName")[0];//设置table 的DataSetName
tableDsNameElement.InnerText = sourceDataTable.TableName; #region 报表主体设置 //获取Details\TableRows\TableRow\TableCells
XmlNode detailsTableCellsNode = doc.GetElementsByTagName("Details")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; //获取Header\TableRows\TableRow\TableCells
XmlNode headerTableCellsNode = doc.GetElementsByTagName("Header")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; //获取TableColumns
XmlNode tableColumnsNode = doc.GetElementsByTagName("TableColumns")[0]; //获取Footer\TableRows\TableRow\TableCells
XmlNode footerTableCellsNode = doc.GetElementsByTagName("Footer")[0].ChildNodes[0].ChildNodes[0].ChildNodes[0]; XmlNode fieldsElement = doc.GetElementsByTagName("Fields")[0];
foreach (DataColumn col in sourceDataTable.Columns)
{
#region 添加DataSet和添加DataSet字段信息
XmlElement fieldElement = doc.CreateElement("Field");
fieldElement.SetAttribute("Name", col.ColumnName);
fieldsElement.AppendChild(fieldElement); XmlElement dataFieldElement = doc.CreateElement("DataField");
dataFieldElement.InnerText = col.ColumnName;
fieldElement.AppendChild(dataFieldElement); XmlElement typeNameElement = doc.CreateElement("rd:TypeName");
typeNameElement.InnerText = col.DataType.ToString();
fieldElement.AppendChild(typeNameElement);
#endregion #region Detail
XmlElement detailTableCell = doc.CreateElement("TableCell");
detailsTableCellsNode.AppendChild(detailTableCell); XmlElement detailReportItems = doc.CreateElement("ReportItems");
detailTableCell.AppendChild(detailReportItems); XmlElement detailTextbox = doc.CreateElement("Textbox");
detailTextbox.SetAttribute("Name", col.ColumnName);
detailReportItems.AppendChild(detailTextbox); XmlElement detailDefaultName = doc.CreateElement("rd:DefaultName");
detailDefaultName.InnerText = col.ColumnName;
detailTextbox.AppendChild(detailDefaultName);
XmlElement detailCanGrow = doc.CreateElement("CanGrow");
detailCanGrow.InnerText = "true";
detailTextbox.AppendChild(detailCanGrow); XmlElement detailValue = doc.CreateElement("Value");
detailValue.InnerText = "=Fields!"+col.ColumnName+".Value";
detailTextbox.AppendChild(detailValue);
#endregion #region HEADER
XmlElement headerTableCell = doc.CreateElement("TableCell");
headerTableCellsNode.AppendChild(headerTableCell); XmlElement headerReportItems = doc.CreateElement("ReportItems");
headerTableCell.AppendChild(headerReportItems); XmlElement headerTextbox = doc.CreateElement("Textbox");
headerTextbox.SetAttribute("Name", col.ColumnName + "1");
headerReportItems.AppendChild(headerTextbox); XmlElement headerDefaultName = doc.CreateElement("rd:DefaultName");
headerDefaultName.InnerText = col.ColumnName+"1";
headerTextbox.AppendChild(headerDefaultName);
XmlElement headerCanGrow = doc.CreateElement("CanGrow");
headerCanGrow.InnerText = "true";
headerTextbox.AppendChild(headerCanGrow); XmlElement headerValue = doc.CreateElement("Value");
headerValue.InnerText = heardCHName[col.ColumnName].ToString();
headerTextbox.AppendChild(headerValue);
#endregion #region tableColumn
XmlElement tableColumn = doc.CreateElement("TableColumn");
tableColumnsNode.AppendChild(tableColumn);
XmlElement Width = doc.CreateElement("Width");
Width.InnerText = width;
tableColumn.AppendChild(Width);
#endregion XmlElement footerTableCell = doc.CreateElement("TableCell");
footerTableCellsNode.AppendChild(footerTableCell); XmlElement footerReportItems = doc.CreateElement("ReportItems");
footerTableCell.AppendChild(footerReportItems); XmlElement footerTextbox = doc.CreateElement("Textbox");
footerTextbox.SetAttribute("Name", col.ColumnName + "2");
footerReportItems.AppendChild(footerTextbox); XmlElement footerDefaultName = doc.CreateElement("rd:DefaultName");
footerDefaultName.InnerText = col.ColumnName+"2";
footerTextbox.AppendChild(footerDefaultName); XmlElement footerCanGrow = doc.CreateElement("CanGrow");
footerCanGrow.InnerText = "true";
footerTextbox.AppendChild(footerCanGrow); XmlElement footerValue = doc.CreateElement("Value");
footerTextbox.AppendChild(footerValue);
} MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(XmlDocument));
serializer.Serialize(ms, doc);
ms.Position = 0;
string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";
doc.Save(path);
return ms; #endregion
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货