C# 本地报表处理过程中出错
我正在尝试在打印机上进行自动打印,但出现错误“本地报表处理过程中发生错误”。这是我的代码:C# 本地报表处理过程中出错,c#,winforms,rdlc,C#,Winforms,Rdlc,我正在尝试在打印机上进行自动打印,但出现错误“本地报表处理过程中发生错误”。这是我的代码: private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { Stream stream = new File
private Stream CreateStream(string name,
string fileNameExtension, Encoding encoding,
string mimeType, bool willSeek)
{
Stream stream = new FileStream(@"..\..\" + name +
"." + fileNameExtension, FileMode.Create);
m_streams.Add(stream);
return stream;
}
// Export the given report as an EMF (Enhanced Metafile) file.
private void Export(LocalReport report)
{
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" <PageWidth>2.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>2in</MarginLeft>" +
" <MarginRight>5in</MarginRight>" +
" <MarginBottom>0in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
report.Render("Image", deviceInfo, CreateStream,
out warnings);
foreach(Stream stream in m_streams)
stream.Position = 0;
}
// Handler for PrintPageEvents
private void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new
Metafile(m_streams[m_currentPageIndex]);
ev.Graphics.DrawImage(pageImage, ev.PageBounds);
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
private void Print()
{
const string printerName =
"HP LaserJet 2300 PCL6 Class Driver";
if(m_streams == null || m_streams.Count == 0)
return;
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = printerName;
if(!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format(
"Can't find printer \"{0}\".", printerName);
MessageBox.Show(msg, "Print Error");
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
printDoc.Print();
}
Code Button Click Event
ds.Tables.Add(dt);
ds.WriteXmlSchema("sample.xml");
ds.ReadXml("sample.xml");
ds.WriteXmlSchema("sample.xsd");
LocalReport report = new LocalReport();
report.ReportPath = "SaleReport1.rdlc";
report.DataSources.Add(
new ReportDataSource("Table1", ds.Tables[0]));
Export(report);
m_currentPageIndex = 0;
Print();
私有流CreateStream(字符串名称,
字符串文件名扩展名,编码,
字符串mimeType,bool willSeek)
{
Stream=新文件流(@“.\..\”+名称+
“+fileNameExtension,FileMode.Create);
m_streams.Add(stream);
回流;
}
//将给定报告导出为EMF(增强元文件)文件。
私有void导出(LocalReport)
{
字符串设备信息=
"" +
“电动势”+
“2.5英寸”+
“11英寸”+
“0.5英寸”+
“2英寸”+
“5英寸”+
“0英寸”+
"";
警告[]警告;
m_streams=新列表();
report.Render(“图像”、deviceInfo、CreateStream、,
发出警告);
foreach(m_streams中的流)
流位置=0;
}
//PrintPageEvents的处理程序
私有void打印页(对象发送方,PrintPageEventArgs ev)
{
图元文件pageImage=new
元文件(m_streams[m_currentPageIndex]);
ev.Graphics.DrawImage(页面图像,ev.PageBounds);
m_currentPageIndex++;
ev.HasMorePages=(m_currentPageIndex
我也有同样的问题。报表处理过程中出错。DatasetName和我发现连接字符串存在问题;我必须从使用windows身份验证切换到sql身份验证,然后我的报告才能工作
报表数据源名称必须与您通过ReportDataSource对象提供的名称匹配。这似乎不是您发布的代码的问题,而是报表定义中的错误 您必须捕获异常并查看不同级别的InnerException;i、 e:
ex.Message
ex.InnerException.Message
ex.InnerException.InnerException.Message
您正在使用windows身份验证吗?或者SQL身份验证?你能看一下我的答案吗?不,我没有使用SQL bro m使用xml数据集填充和数据表xml填充,我正在动态创建数据表列并给他值