嗨,伙计们,我一直在使用 WPF C# 工作和搜索报告,并找到了一份不错的报告,而且也很容易,找到了这个链接并使用它。所以我尝试使用它,请检查我的代码,
在我EmployeeProfileWindow
的打印按钮中,
private void btnprintviolation_Click(object sender, RoutedEventArgs e)
{
ReportViolationWindow NewReportViolationWindow = new ReportViolationWindow();
//Windows.Add(NewReportViolationWindow);
GlobalVar.ViolationEmpNum = txtdispid.Text;
GlobalVar.ViolationRefNumToPrint.Clear();
for (int i = 0; i < lvviolations.Items.Count; i++)
{
GlobalVar.ViolationRefNumToPrint.Add(((EmpViolationObject)lvviolations.Items[i]).VioRefNum);
}
NewReportViolationWindow.Show();
}
因此,如果我单击该按钮,它将出现一个新的窗口名称NewReportViolationWindow
。我将在模板文件夹中复制或编辑开源示例中的内容。我创建了名为 的报告ReportViolation
,
现在这里是后面的代码NewReportViolationWindow
。
ReportDocument reportDocument = new ReportDocument();
string ats = new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName;
StreamReader reader = new StreamReader(new FileStream(ats.ToString() + @"\Template\ReportViolation.xaml", FileMode.Open, FileAccess.Read));
reportDocument.XamlData = reader.ReadToEnd();
reportDocument.XamlImagePath = Path.Combine(ats.ToString(), @"Template\");
reader.Close();
DateTime dateTimeStart = DateTime.Now; // start time measure here
List<ReportData> listData = new List<ReportData>();
//foreach (string item in GlobalVar.ViolationRefNumToPrint)
for (int i = 0; i < 5 ; i++)
{
ReportData data = new ReportData();
data.ReportDocumentValues.Add("PrintDate", DateTime.Now);
data.ReportDocumentValues.Add("EmpIDNum", NewIDNumber.ToString());
data.ReportDocumentValues.Add("EmpName", NewEmpName.ToString());
data.ReportDocumentValues.Add("EmpPosition", NewPosition.ToString());
//data.ReportDocumentValues.Add("VioRefCode", item.ToString());
listData.Add(data);
}
XpsDocument xps = reportDocument.CreateXpsDocument(listData);
documentViewer.Document = xps.GetFixedDocumentSequence();
// show the elapsed time in window title
Title += " - generated in " + (DateTime.Now - dateTimeStart).TotalMilliseconds + "ms";
}
catch (Exception ex)
{
// show exception
MessageBox.Show(ex.Message + "\r\n\r\n" + ex.GetType() + "\r\n" + ex.StackTrace, ex.GetType().ToString(), MessageBoxButton.OK, MessageBoxImage.Stop);
}
现在,当我运行我的应用程序并单击打印按钮时。有时一开始它会毫无错误地打开,NewReportViolationWindow
但是当我尝试关闭报告或再次单击按钮时,它会给出一条消息,
指定的 Visual 已经是另一个 Visual 的子对象或组件目标的根
这是错误的图像,
我认为问题是当我调用打印按钮后面的代码的打印报告时,任何人都可以吗?请... :)
第二次编辑
关于你的问题:- 您说报告窗口通常第一次打开时没有错误,但之后就没有了?
是,对的..
- 中是否有任何共享资源正在使用
ReportViolationWindow
?
抱歉,我不知道我所做的只是遵循开源中的示例。
- 你是如何处理/处理关闭的
ReportViolationWindow
?
到目前为止,我仍然没有正确关闭我的ReportViolationWindow
. 当我单击关闭按钮时,就是这样,对不起。:(
- 您是否保留对此
ReportViolationWindow
实例的任何其他引用?
没有。据我所知。