報表載入大資料時顯示進度條
由於某些報表長度非常大,如果要生成或執行非常大的報表,需要一段時間,這段時間可能是幾秒,最長也可能達到幾十秒,這時進度條的需求就出現了。終端使用者需要一個進度條來顯示 報表生成的進度,不然終端使用者可能將正常報表生成時間理解為應用系統的不穩定。
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 下載檔案實時進度條顯示
- LVGL高效顯示進度條
- 解決單執行緒QT UI 載入進度條實時顯示方案記錄執行緒QTUI
- 直播平臺製作,Glide載入網路圖,進度條顯示IDE
- OSS實現檔案下載進度條顯示
- 直播系統開發,實現在進度條中顯示文字顯示進度
- 直播app開發,點選螢幕時顯示進度條APP
- 如何在請求資料時,顯示載入動畫動畫
- 直播平臺開發,載入網頁、html檔案顯示載入進度網頁HTML
- 製作遊戲載入進度條遊戲
- 短視訊商城系統,Android進度條,自定義進度條,顯示百分比Android
- 直播平臺軟體開發,讓原本沒有進度條的頁面顯示進度條
- 如何實現圖片預載入和載入進度條
- 記錄個簡單的進度條同步顯示方法
- 進度條和列表形式顯示的控制元件控制元件
- 直播app系統原始碼,固定速度的進度條顯示APP原始碼
- jQuery環形旋轉載入進度條效果jQuery
- Android多執行緒+單執行緒+斷點續傳+進度條顯示下載Android執行緒斷點
- Python世界tqdm進度條顯示等新潮小工具推薦Python
- mysql資料庫中表打不開,讀表時一直顯示正在載入,卡死不動,無法操作MySql資料庫
- 【新特性速遞】進度條,進度條,進度條
- 直播平臺原始碼,通知欄中顯示滑動的進度條原始碼
- android studio 搜尋只顯示100條資料Android
- uni-app中安卓包檢查更新、新版本下載、下載進度條顯示功能實現APP安卓
- vue中頁面載入進度條效果的實現Vue
- Vue canvas繪製圓形進度條動畫載入VueCanvas動畫
- Glide載入進度IDE
- 潤乾報表中進度條的一種實現方式
- Ajax 處理時進度條使用
- [20211108]sqlplus資料寬度顯示設定.txtSQL
- Dynamics CRM 列表資料超過5000條時如何顯示實際的數量
- HttpWebChilent上傳與下載進度條HTTPWeb
- Python展示檔案下載進度條Python
- vxe-upload 上傳附件顯示進度
- InnoDB資料字典--字典表載入
- WPFDataGrid效能載入大資料大資料
- Laravel 固定每頁顯示條數和顯示頁數(超過部分直接返回空資料)Laravel
- PyQT5之PyQtGraph實時資料顯示QT
- Oracle OCP(07):顯示來自多個表的資料Oracle