我正在使用Windows窗体应用程序...我有一个水晶报告...用于在按钮点击事件中显示水晶报告我给出了这样的代码:
SqlCommand cmdrslt = new SqlCommand("rptdeptwisevisitor", con.connect);
cmdrslt.CommandType = CommandType.StoredProcedure;
cmdrslt.Parameters.Add("@startDate", SqlDbType.NVarChar, 50, ParameterDirection.Input).Value = frmdateval;
cmdrslt.Parameters.Add("@endDate", SqlDbType.NVarChar, 50, ParameterDirection.Input).Value = Todateval;
SqlParameter tvp1 = cmdrslt.Parameters.AddWithValue("@Dept", DepTable);
tvp1.SqlDbType = SqlDbType.Structured;
tvp1.TypeName = "dbo.Dept";
da.SelectCommand = cmdrslt;
da.Fill(ds);
DeptWiseRpt rpt = new DeptWiseRpt();
if ((ds.Tables(0).Rows.Count > 0)) {
rpt.SetDataSource(ds.Tables(0));
rpt.SetParameterValue("frmd", setparmstartd);
rpt.SetParameterValue("tod", setparmendd);
CrystalReportViewer1.ReportSource = rpt;
}
这需要时间来加载数据..所以我想在这个表格上放一个进度条。我可以把它放在哪里?
任何帮助都非常明显......
答案 0 :(得分:0)
加载报告是一个操作(最多两个:查询和显示查看器),因此您无法拆分它确实显示进度。您可以显示 progressless 栏或使用这样的动画图像:
该操作必须与UI线程并行运行(使用Thread,Task或BackgroundWorker),否则您的进度(进度条或图像)将不会更新甚至一次。对于加载时,您不应显示报表查看器本身(使其不可见或大小为1x1)。加载完成后:隐藏进度并显示查看器。
一些代码:
// hide viewer, show progress
CrystalReportViewer1.Visible = false;
pictureBoxProgress.Visible = true;
// start thread
(new Thread(() => {
// your code
SqlCommand cmdrslt = new SqlCommand("rptdeptwisevisitor", con.connect);
cmdrslt.CommandType = CommandType.StoredProcedure;
cmdrslt.Parameters.Add("@startDate", SqlDbType.NVarChar, 50, ParameterDirection.Input).Value = frmdateval;
cmdrslt.Parameters.Add("@endDate", SqlDbType.NVarChar, 50, ParameterDirection.Input).Value = Todateval;
SqlParameter tvp1 = cmdrslt.Parameters.AddWithValue("@Dept", DepTable);
tvp1.SqlDbType = SqlDbType.Structured;
tvp1.TypeName = "dbo.Dept";
da.SelectCommand = cmdrslt;
da.Fill(ds);
DeptWiseRpt rpt = new DeptWiseRpt();
if ((ds.Tables(0).Rows.Count > 0)) {
rpt.SetDataSource(ds.Tables(0));
rpt.SetParameterValue("frmd", setparmstartd);
rpt.SetParameterValue("tod", setparmendd);
// controls operations require invoke
BeginInvoke(() => {
CrystalReportViewer1.ReportSource = rpt;
pictureBoxProgress.Visible = false;
CrystalReportViewer1.Visible = true;
});
}
})).Start();