- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,我一直在使用 WPF C# 搜索报告,找到了一份不错的报告,而且也很容易,找到了这个 link并使用它。所以我尝试使用它,请检查我的代码,
在我的 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
而没有错误,但是当我尝试关闭报告或再次单击该按钮时,它会给出一条消息,
Specified Visual is already a child of another Visual or the root of the component target
这是错误的图片,
我认为问题是当我调用打印按钮背后的代码的打印报告时,嗯,有人可以吗?请... :)
是的正确..
ReportViolationWindow
?抱歉,我不知道,因为我只是按照开源中的示例进行操作。
ReportViolationWindow
?到目前为止,我仍然没有正确关闭 ReportViolationWindow
的代码。当我点击关闭按钮时,就这样了,很抱歉。 :(
ReportViolationWindow
的任何其他引用实例?没有。据我所知。
最佳答案
在将视觉对象添加到新的父对象之前,您必须先将其从当前父对象“分离”出来 - 这样做的原因主要是渲染和合成引擎的工作方式;如果原始父元素不知道它不再负责呈现该子元素,并且 WPF 允许您将它附加到另一个父元素,那么在最好的情况下,您会呈现重复的 Visuals,而在最坏的情况下在这种情况下,您可能会陷入无限循环!
由于父元素负责添加/删除子元素,因此您需要在父元素级别处理此问题,通常调用
RemoveLogicalChild
或
RemoveVisualChild
(或者理想情况下,从原始 ItemsSource 中删除项目本身并将其添加到新项目中)
编辑:从技术上讲,第一段是正确的,但我认为第二段不适用于您...在查看了位于 WpfReports on CodePlex 的 ReportPaginator
类的源代码之后,我注意到以下内容:
现在,针对您的实际问题:
您说报告窗口通常第一次打开时不会出错,但之后就不会了?
ReportViolationWindow
中是否正在使用任何共享资源?
您如何处置/处理 ReportViolationWindow
的关闭?
您是否保留了对该 ReportViolationWindow
实例的任何 其他引用?
我想尝试的一件事是在创建它的窗口中声明类型为 NewReportViolationWindow
的单个成员变量 (EmployeeProfileWindow
), 而不是这个:
private void btnprintviolation_Click(object sender, RoutedEventArgs e)
{
ReportViolationWindow NewReportViolationWindow = new ReportViolationWindow();
尝试这样的事情:
ReportViolationWindow _reportViolationWindow;
private void btnprintviolation_Click(object sender, RoutedEventArgs e)
{
if(_reportViolationWindow != null)
{
_reportViolationWindow.Close();
_reportViolationWindow = null;
}
_reportViolationWindow = new ReportViolationWindow();
关于c# - 指定的 Visual 已经是另一个 Visual 的子项或组件目标的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426227/
一段时间以来,我一直在做这个反复出现的噩梦(阅读 - 我的应用程序中的错误)。出于某种原因,某个计时器在我停止后继续发送“Elapsed”事件,即使 在事件本身 计时器“承认”已被禁用!检查一下: /
为了找到 2 个 git 分支的共同祖先,需要做的是: git merge-base branch another_branch 好的。但是……如果两个分支都已经 merge 了怎么办?当我在这种情况
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 1年前关闭。 Improve this
我想要一个相机 View ,可以将图像捕获到本地文件或让用户从本地照片库中选择图像。我想也许有人为此编写了很好的库/代码。也许我可以利用它。已经有好的了吗?谢谢。我只是避免重新发明轮子:) 最佳答案
我从 master 分支创建了一个功能分支。之后有来自功能分支的提交 [F1]。 [F1] -- Feature Branch / [M1]-[M2
我喜欢使用 .NET 进行编程,尤其是 C# 3.0、.NET 3.5 和 WPF。但我特别喜欢的是 Mono .NET 确实与平台无关。 现在我听说了 Mono 中的 Olive 项目。我找不到某种
介绍和搜索 所以我认为我犯了一个严重的错误,我很担心。我已经分析了独立负责人的论坛,我已经接近找到答案,但场景太具体,不适用于我所在的位置。如果您找到可以回答我的问题的特定主题,请链接我。 例如:Ho
我有一个类似于下图的提交图。标记为 * 的提交表示大量提交。 A* | B--------- | | C* D* master 和 cor
我喜欢使用 .NET 进行编程,尤其是 C# 3.0、.NET 3.5 和 WPF。但我特别喜欢的是 Mono .NET 确实与平台无关。 现在我听说了 Mono 中的 Olive 项目。我找不到某种
我们最近接手了一个 .NET 项目,在查看 db 后,我们在某些列中有以下内容: 1)某些列具有诸如" & etc etc 2) 有些有 标签和其他非 html 编码的标签 这些数据
你好,当我导航到应用程序中的另一个页面时出现此错误 我不知道为什么这个错误出现 #0 _AsyncCompleter.complete (dart:async/future_impl.da
我使用以下 C 算法计算数据的 CRC32: #define CRC32_POLYNOM_REVERSED 0xEDB88320 uint32 calcCrc32(uint8* buffer, u
我试图在我的一个测试中断言模型中的字段没有改变。我知道从哲学上这是不正确的,但由于我控制了我需要知道的所有变量,所以我只想检查我的数据库条目是否没有改变。 我愿意接受一个解决方案,该解决方案可以将其转
我是 GitHub 的新手。并通过 Eclipse 使用它我们是两个人在开发一个应用程序。当我在 Git shell 中检查 git status 时,我得到以下状态。 On branch maste
简单代码: std::ifstream file("file.txt"); std::string line; while(getline(file,line)) ; //exhaust file
是的,我又找不到这个 Gradle DSL 方法:'compile()' 问题。 我检查了我有: buildscript { repositories { jcenter()
HTML: articles CSS: #main_menu { float: left; padding-top: 10px; vertical-align: m
我是一名优秀的程序员,十分优秀!