こんにちは皆さん、私は WPF C# を使用してレポートを探して作業しており、素敵なレポートの 1 つを見つけました。また、このリンクを見つけて使用してください。だから私はそれを使用しようとしました、plsは私のコードをチェックしてください、
私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
。オープンソースのサンプルと同じように、Template フォルダーにコピーまたは編集します。という名前のレポートを作成しました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
ますが、レポートを閉じるか、ボタンをもう一度クリックしようとすると、メッセージが表示されます。
指定されたビジュアルは、すでに別のビジュアルの子であるか、コンポーネント ターゲットのルートです
これがエラーの画像です。
問題は、印刷ボタンの背後にあるコードである印刷レポートを呼び出すときだと思います。うーん、誰でもできますか? お願いします... :)
2回目の編集
あなたの質問について:- レポート ウィンドウは通常、最初はエラーなく開きますが、その後は開かないとおっしゃっていますか?
はい正解..
- で使用されている共有リソースはあり
ReportViolationWindow
ますか?
申し訳ありませんが、私が何をしたかは、オープンソースのサンプルに従っているだけなので、わかりません。
- のクローズをどのように処分/処理してい
ReportViolationWindow
ますか?
これまでのところ、適切に閉じるためのコードがまだありませんReportViolationWindow
。閉じるボタンをクリックすると、それで終わりです。申し訳ありません。:(
ReportViolationWindow
このインスタンスへの他の参照を保持していますか?
いいえ、私が知る限り。