如何控制 reportViewer 加载动画的显示

laorer 2009-08-12 11:55:51



我需要动态的把 rdlc 文件加载到 reportViewer 中,这部分已经完成了,因为数据是先从数据库中获取,然后再赋到 reportViewer 中, 所以如果数据量比较大的往左,那么就会reportViewer 就不动了,等数据取完之后,就会先显示 那个加载动画
(一个转动的绿圈)现在想在加载数据之前(即从数据库得到数据之前)就显示这个加载动画,请问有什么方法可以解决,谢谢!
...全文
437 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
laorer 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhaozhijun0207 的回复:]
引用 4 楼 laorer 的回复:
winform

C# codeprivatevoid btn裁片细码单_Click(object sender, EventArgs e)
{//打印前,加载等待动画 Form1 afrm=new Form1();//我这里用一个Form窗体,做的等待动画 afrm.Show();
afrm.Refresh();//水晶报表打印 ReportDocument aReportDocument=new ReportDocument();
aReportDocument.Load(@"E:\CrystalReportsApplication1\裁片细码单.rpt");foreach (Table aTablein aReportDocument.Database.Tables)
{
aTable.LogOnInfo.ConnectionInfo.ServerName= clsIni.ServerName;//控制面板-数据源 aTable.LogOnInfo.ConnectionInfo.DatabaseName= clsIni.DatabaseName;//数据库名称 aTable.LogOnInfo.ConnectionInfo.UserID= clsIni.UserID;//用户名 aTable.LogOnInfo.ConnectionInfo.Password= clsIni.Password;//密码 aTable.ApplyLogOnInfo(aTable.LogOnInfo);
}
View.SelectionFormula="{表名.ID} = 'A001'";
View.ReportSource= aReportDocument;//View.Zoom(100);//打印完后,释放等待动画afrm.Dispose();
}
[/Quote]

其实我就是想显示 reportViewer 中的那个动画,如果另外弹出一个窗口,也可以,但那不是我想要的方案,不过还是谢了....

laorer 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 toni_308 的回复:]
你是想要全部显示(数据量大时),然后实现分页吗?
用list,属性里设置分组字段
[/Quote]

这个没看懂....
Lizzy莲 2009-08-13
  • 打赏
  • 举报
回复
你是想要全部显示(数据量大时),然后实现分页吗?
用list,属性里设置分组字段
zhaozhijun0207 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 laorer 的回复:]
winform
[/Quote]

private void btn裁片细码单_Click(object sender, EventArgs e)
{
//打印前,加载等待动画
Form1 afrm = new Form1();//我这里用一个Form窗体,做的等待动画
afrm.Show();
afrm.Refresh();

//水晶报表打印
ReportDocument aReportDocument = new ReportDocument();
aReportDocument.Load(@"E:\CrystalReportsApplication1\裁片细码单.rpt");
foreach (Table aTable in aReportDocument.Database.Tables)
{
aTable.LogOnInfo.ConnectionInfo.ServerName = clsIni.ServerName;//控制面板-数据源
aTable.LogOnInfo.ConnectionInfo.DatabaseName = clsIni.DatabaseName;//数据库名称
aTable.LogOnInfo.ConnectionInfo.UserID = clsIni.UserID;//用户名
aTable.LogOnInfo.ConnectionInfo.Password = clsIni.Password;//密码
aTable.ApplyLogOnInfo(aTable.LogOnInfo);
}
View.SelectionFormula = "{表名.ID} = 'A001' ";
View.ReportSource = aReportDocument;
//View.Zoom(100);

//打印完后,释放等待动画
afrm.Dispose();
}
laorer 2009-08-13
  • 打赏
  • 举报
回复
嗯,已经解决问题了,

在上面代码的
while (t != 1)
{
Refresh();
}


谢谢各位了
Lizzy莲 2009-08-13
  • 打赏
  • 举报
回复
帮顶了~~~~
laorer 2009-08-13
  • 打赏
  • 举报
回复
public partial class GifForm : Form
{
public GifForm()
{
InitializeComponent();
}

private int t = 0;
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Visible = false;
// pictureBox1.Image = Resources._2;
pictureBox1.Visible = true;
Refresh();
// Refresh();

ThreadPool.QueueUserWorkItem(Print,null);
//Print();

while (t != 1)
{
}

}

private void Print(Object o)
{
for (int i = 0; i < 15000; i++)
{
Console.Write(".");
}
Console.WriteLine("..end..:{0}", System.DateTime.Now.ToString("HH.mm.ss.ffff"));
t = 1;
}
}


就是一个 form 里有一个 picture ,放的是一个 gif 动画,按照这种情况就是 picture 先显示第一帧,然后一直等到打印完之后再正常显示

我想要的情况是 picture 正常显示,同时可以打印 .

这里肯定要关于 多线程,但如何做呢?
laorer 2009-08-13
  • 打赏
  • 举报
回复


是这种方式动态加载 rdlc 文件

我的意思是指能在 获得 dataSet 时就出现那个 绿圈,因为这部分比较费时间
print.GetDataTable = dataSet.Tables[dataMember];

.......................

我这个加载的动画是在 Form1.cs 中第一次按按钮 触发到PrintJiShuYaoQiu.cs 时出现,之后,如果关掉PrintJiShuYaoQiu.cs,再从Form1.cs中 换rdlc报表的话,再按按钮,就不出现那个转动的绿圈

第二次也会出现的,可能是由于第一次的缓存还是什么原因,使得它出现后很快又关闭了...

...................

我现在已经可以 在 获得 dataSet 时就出现那个 绿圈,但是却不转动,估计是和线程相关,我通过另一个线程取数据,但是这个绿圈还是不转动.........
Lizzy莲 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 laorer 的回复:]
你试试自己动态加载  rdlc 文件就明白了,你先要把数据放到 reportViewer.localreport.datasource 中,然后再 refreshReport(), 就明白那个加载动画是什么时候出现了...
[/Quote]




我在Form1.cs

PrintJiShuYaoQiu print = new PrintJiShuYaoQiu();
print.Path = PATH;//自己选择的rdlc报表的报表路径
print.GetDataTable = dataSet.Tables[dataMember];
print.GetDataMember = dataMember;
print.ShowDialog();


传到PrintJiShuYaoQiu.cs 这个Form里(里面有个reportViewerPrint)

private void PrintJiShuYaoQiu_Load(object sender, EventArgs e)
{
this.reportViewerPrint.Reset();
this.reportViewerPrint.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
this.reportViewerPrint.LocalReport.ReportPath = PATH;
this.reportViewerPrint.LocalReport.DataSources.Add(new ReportDataSource(dataMember, dataTable));//这里的dataTable,dataMember,PATH都是刚刚那个传过来的
this.reportViewerPrint.RefreshReport();
}


你的意思是这样动态加载rdlc文件吗?


我这个加载的动画是在 Form1.cs 中第一次按按钮 触发到PrintJiShuYaoQiu.cs 时出现,之后,如果关掉PrintJiShuYaoQiu.cs,再从Form1.cs中 换rdlc报表的话,再按按钮,就不出现那个转动的绿圈
laorer 2009-08-13
  • 打赏
  • 举报
回复
我已经可以显示那个加载动画了,主要是将其 visible 设为
true 之后,再 refresh, 
但现在有了新的问题,
我在加载数据时,这个加载动画不动,只是显示第一帧,只有数据加载完成之后,才会有反应(即转动),想过用线程取数据,但没有效果,请问还有什么办法可以解决吗?
laorer 2009-08-13
  • 打赏
  • 举报
回复
你试试自己动态加载 rdlc 文件就明白了,你先要把数据放到 reportViewer.localreport.datasource 中,然后再 refreshReport(), 就明白那个加载动画是什么时候出现了...
Lizzy莲 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 laorer 的回复:]
引用 10 楼 toni_308 的回复:
你是想要全部显示(数据量大时),然后实现分页吗?
用list,属性里设置分组字段


这个没看懂....
[/Quote]

我是想回答你4楼的话的:但我每次要取多少数据才能使前后能连续
(我好像想错了,嘿嘿)



其实你的意思我不怎么明白 :那个加载动画
(一个转动的绿圈)现在想在加载数据之前(即从数据库得到数据之前)就显示这个加载动画 ?
(真要这样的效果,我不会,帮顶了)

不是因为有数据源 ,然后加载到 reportViewer 上(rdlc报表存在),才出现那个转动的绿圈?
迷糊中。。。。
llsen 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 laorer 的回复:]
不好设置,因为有 group, 并不清楚一个 group 有多少 记录
[/Quote]

这个是比较麻烦
laorer 2009-08-12
  • 打赏
  • 举报
回复
不好设置,因为有 group, 并不清楚一个 group 有多少 记录
llsen 2009-08-12
  • 打赏
  • 举报
回复
你可以设置每页显示多少条
然后每次检索这么多条就可以了
laorer 2009-08-12
  • 打赏
  • 举报
回复
winform

-----------
数据量大的话,直接塞给报表,效率是很慢
可以分页检索数据源
但我每次要取多少数据才能使前后能连续
冰糖_adam 2009-08-12
  • 打赏
  • 举报
回复
没有遇到过 关注
llsen 2009-08-12
  • 打赏
  • 举报
回复
数据量大的话,直接塞给报表,效率是很慢
可以分页检索数据源
zhaozhijun0207 2009-08-12
  • 打赏
  • 举报
回复
Web or WinForm ?
laorer 2009-08-12
  • 打赏
  • 举报
回复
... 不过还是要谢谢你能回答我的问题...

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧