報表載入大資料時顯示進度條
由於某些報表長度非常大,如果要生成或執行非常大的報表,需要一段時間,這段時間可能是幾秒,最長也可能達到幾十秒,這時進度條的需求就出現了。終端使用者需要一個進度條來顯示 報表生成的進度,不然終端使用者可能將正常報表生成時間理解為應用系統的不穩定。
ActiveReports允許開發者將一個使用者顯示報表生成進度的進度條整合到報表瀏覽器中,類似一下效果:
我們需要Windows forms ProgressBar 這個控制元件,此外還需要一個標籤控制元件用於顯示進度的百分比和提示報表生成完成。
首先要確定報表記錄數來確定進度條的最大值,ActiveReports支援多種型別的資料來源,所以還要確定報表使用的資料來源型別,下面的程式碼示例就是建立一個GetNoOfRecords函式來計算記錄數,這種方式適用於常見資料來源。
public int GetNoOfRecords(object ds)
{
int noOfRecs = 0;
if (ds.GetType().ToString() == "GrapeCity.ActiveReports.Data.SqlDBDataSource")
{
GrapeCity.ActiveReports.Data.SqlDBDataSource ods = (GrapeCity.ActiveReports.Data.SqlDBDataSource)ds;
SqlConnection con = new SqlConnection(ods.ConnectionString);
SqlCommand com = new SqlCommand("Select count(*) as totalRecs from (" + ods.SQL + ")", con);
con.Open();
SqlDataReader sdr = com.ExecuteReader();
sdr.Read();
if (sdr.HasRows)
{
noOfRecs = Convert.ToInt32(sdr[0]);
}
con.Close();
}
else if (ds.GetType().ToString() == "GrapeCity.ActiveReports.Data.OleDBDataSource")
{
GrapeCity.ActiveReports.Data.OleDBDataSource ods = (GrapeCity.ActiveReports.Data.OleDBDataSource)ds;
OleDbConnection con = new OleDbConnection(ods.ConnectionString);
OleDbCommand com = new OleDbCommand("Select count(*) as totalRecs from (" + ods.SQL + ")", con);
con.Open();
OleDbDataReader odr = com.ExecuteReader();
odr.Read();
if (odr.HasRows)
{
noOfRecs = Convert.ToInt32(odr[0]);
}
con.Close();
}
else if (ds.GetType().ToString() == "GrapeCity.ActiveReports.Data.XMLDataSource")
{
GrapeCity.ActiveReports.Data.XMLDataSource xds = (GrapeCity.ActiveReports.Data.XMLDataSource)ds;
noOfRecs = xds.NodeList.Count;
}
else if (ds.GetType().ToString() == "System.Data.DataTable")
{
System.Data.DataTable dtds = (System.Data.DataTable)ds;
noOfRecs = dtds.Rows.Count;
}
else
{
GrapeCity.ActiveReports.Data.ListDataSource lds = (GrapeCity.ActiveReports.Data.ListDataSource)ds;
noOfRecs = lds.List.Count;
}
return noOfRecs;
}
在得到記錄數後,需要將其值設定為最大進度數,並在一個單獨的執行緒中執行的ActiveReports。在單獨程式執行報表能夠實現報表的後臺執行而 且能獲取報表進度。接下來定義一個在FetchData事件中遞增的變數recordCount,這個變數將用來控制進度條的運動,示例程式碼如下所示:
private void CheckProgress(object sender, EventArgs e)
{
if (progressBar1.Maximum > recordCount)
{
progressBar1.Value = recordCount;
label1.Text = ((int)((progressBar1.Value * 100) / progressBar1.Maximum)).ToString() + "%";
}
else
{
timer1.Enabled = true;
label1.Text = "Done!";
progressBar1.Value = progressBar1.Maximum;
StopTimer();
}
}
以上程式碼中的label1是用來顯示進度百分比的。程式碼中也包含了停止和重啟報表生成的按鈕。
相關文章
- 【CLI】使用 Curl 下載檔案實時進度條顯示
- OSS實現檔案下載進度條顯示
- iOS UIWebView載入時新增進度條01iOSUIWebView
- 直播平臺製作,Glide載入網路圖,進度條顯示IDE
- 可愛!帶有數字顯示的載入進度條效果外掛
- ftp下載顯示進度FTP
- 程式執行時,一個進度條顯示INCLUDE程式
- 直播系統開發,實現在進度條中顯示文字顯示進度
- 如何在請求資料時,顯示載入動畫動畫
- 直播app開發,點選螢幕時顯示進度條APP
- 前端資源預載入並展示進度條前端
- oracle impdp 匯入大表報告顯示 out of rowsOracle
- Delphi下載指定網址(URL)的檔案,帶進度條顯示
- 直播平臺開發,載入網頁、html檔案顯示載入進度網頁HTML
- 超酷jQuery進度條載入動畫集合jQuery動畫
- ajax進度條 非同步下載進度條非同步
- 常見的網頁載入進度條網頁
- jQuery載入進度條例項程式碼jQuery
- 直播平臺軟體開發,讓原本沒有進度條的頁面顯示進度條
- 如何實現圖片預載入和載入進度條
- 進度條和列表形式顯示的控制元件控制元件
- 記錄個簡單的進度條同步顯示方法
- 短視訊商城系統,Android進度條,自定義進度條,顯示百分比Android
- jQuery環形旋轉載入進度條效果jQuery
- CSS3 螺紋載入進度條效果CSSS3
- 專案需求討論-WebView進度載入條WebView
- 直播app系統原始碼,固定速度的進度條顯示APP原始碼
- 打造可顯示上傳內容的自定義進度條
- Java實現在控制終端顯示的字元進度條Java字元
- C# 下載帶進度條程式碼(普通進度條)C#
- 自定義SeekBar顯示進度
- ALV報表不能正確顯示資料問題
- js百分比載入進度條效果JS
- Devexpress 報表 顯示devExpress
- 【新特性速遞】進度條,進度條,進度條
- Android多執行緒+單執行緒+斷點續傳+進度條顯示下載Android執行緒斷點
- uni-app中安卓包檢查更新、新版本下載、下載進度條顯示功能實現APP安卓
- Cocos2dx之進度條使用,非同步載入資源進快取非同步快取