国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
web報(bào)表工具填報(bào)功能全攻略
表單提交超鏈接……………………………………………………… 2
單元格不改變時(shí)不參與更新………………………………………… 6
及時(shí)校驗(yàn)……………………………………………………………… 8
跨格數(shù)據(jù)及時(shí)校驗(yàn)…………………………………………………… 12
擴(kuò)展數(shù)據(jù)的數(shù)據(jù)校驗(yàn)………………………………………………… 16
批量修改單元格……………………………………………………… 17
填報(bào)保存值類型……………………………………………………… 19
填報(bào)流水號…………………………………………………………… 22
填報(bào)自動匹配值……………………………………………………… 26
文本域換行…………………………………………………………… 29
下拉框的快速查詢…………………………………………………… 33
行式報(bào)表……………………………………………………………… 34
用戶自定義填報(bào)……………………………………………………… 39
表單提交超鏈接
在填報(bào)時(shí),提交會出現(xiàn)兩種結(jié)果,提交成功和提交失敗,可以對這兩種結(jié)果進(jìn)行事件編輯,在FineReport6.5中可以通過報(bào)表->報(bào)表Web屬性->填報(bào)頁面設(shè)置添加提交成功和提交失敗事件進(jìn)行編輯。
1. 打開模板
2. 添加提交事件
點(diǎn)擊填報(bào)|報(bào)表Web屬性,選擇填報(bào)頁面設(shè)置欄目,進(jìn)入填報(bào)頁面設(shè)置窗口,在右邊欄中添加提交成功和提交失敗事件,如下圖所示
具體的填報(bào)成功事件和填報(bào)失敗事件代碼如下
填報(bào)成功事件,添加JS代碼:window.open(“http://www.baidu.com”);
在填報(bào)成功后,打開百度連接。
提交失敗事件,JS代碼:
window.open("http://localhost:8079/WebReport/ReportServer?op=fs");
該代碼用于填報(bào)提交失敗后打開產(chǎn)品演示文檔。
3. 填報(bào)并預(yù)覽
點(diǎn)擊設(shè)計(jì)器的填報(bào)預(yù)覽,效果如圖
點(diǎn)擊提交,顯示提交成功
點(diǎn)擊確定按鈕,這是觸發(fā)提交成功事件,鏈接到百度首頁
不填用戶編號時(shí)提交失敗,如圖
點(diǎn)擊確定按鈕,觸發(fā)提交失敗事件,頁面跳轉(zhuǎn)到產(chǎn)品演示文檔
單元格不改變時(shí)不參與更新
填報(bào)提交時(shí),將根據(jù)情況進(jìn)行insert/update操作,當(dāng)填報(bào)列數(shù)較多時(shí),速度可能較慢,因?yàn)樗獙λ凶侄芜M(jìn)行操作。此時(shí)可以設(shè)置單元格不改變時(shí)不參與更新,這樣,相應(yīng)的數(shù)據(jù)列在數(shù)據(jù)不改變時(shí),不會參與更新操作,即SQL語句中update中不包含該列,進(jìn)而提高填報(bào)的效率。但這個(gè)功能只有在填報(bào)更新數(shù)據(jù)的時(shí)候有效,如果是插入操作的話仍是插入所有字段,因此需要在使用報(bào)表主鍵的的基礎(chǔ)上使用該功能。
1.  新建報(bào)表
新建一張空白報(bào)表,添加數(shù)據(jù)庫查詢ds1,SQL語句為:SELECT * FROM stscore WHERE studentno=1014,設(shè)計(jì)成如下格式的報(bào)表
2.  控件設(shè)置
給單元格加上控件,分別定義如下單元格控件屬性
單元格
B3
C3
D3
E3
F3
G3
控件類型
文本
文本
文本
文本
文本
文本
3.  報(bào)表填報(bào)屬性
添加內(nèi)置SQL,具體設(shè)置如下圖,將studentno設(shè)為主鍵,所有的單元格設(shè)置不改變時(shí)不參與更新,這樣進(jìn)行update操作時(shí)只有單元格改變的列才參與更新。
4.  保存并預(yù)覽
保存模板,點(diǎn)擊設(shè)計(jì)器的填報(bào)預(yù)覽,結(jié)果如下圖所示
我們修改Achilles這個(gè)學(xué)生的英語成績,原為93,我們改為100,點(diǎn)擊提交
此時(shí),日志面板中的更新語句為
INFO:UPDATE [STSCORE] SET [GRADE]=?  WHERE [STUDENTNO]=? AND [COURSE]=?
可以看到,數(shù)據(jù)庫只更新了GRADE的值,且只對三個(gè)字段進(jìn)行了操作。
但若是不設(shè)置“單元格不改變時(shí)不參與更新”,同樣的操作我們將會得到如下更新語句:
INFO:UPDATE [STSCORE] SET [CLASSNO]=?,[NAME]=?,[SEX]=?,[GRADE]=?  WHERE [STUDENTNO]=? AND [COURSE]=?
數(shù)據(jù)庫對每個(gè)字段都進(jìn)行了更新操作,若列數(shù)量多的情況就會非常耗時(shí)了。
及時(shí)校驗(yàn)
現(xiàn)有的控件設(shè)置面板中包含有各種及時(shí)校驗(yàn),如文本控件的填寫規(guī)則校驗(yàn)、數(shù)字的精度校驗(yàn)、日期時(shí)間可以規(guī)定范圍等,以下介紹幾種常用的及時(shí)校驗(yàn)設(shè)置。
1.       文本控件及時(shí)校驗(yàn)
文本控件類型有不為空的校驗(yàn),也有填寫規(guī)則校驗(yàn),更有自定義校驗(yàn),F(xiàn)ineReport報(bào)表中自帶有長度,郵件,身份證,郵政編碼,電話 ,手機(jī)等及時(shí)校驗(yàn),自定義校驗(yàn)可以根據(jù)需要自己書寫正則表達(dá)式。
例如輸入驗(yàn)證用戶密碼的正則表達(dá)式:“^[a-zA-Z]\w{5,17}$”表示密碼規(guī)則是以字母開頭,長度在6-18之間,只能包含字符、數(shù)字和下劃線。
l  \d任意一個(gè)數(shù)字,0~9中的任意一個(gè)
l  \w任意一個(gè)字母或數(shù)字或下劃線,也就是A-Z,a-z,0-9中任意一個(gè)
l  \s包括空格、制表符、換頁符等空白字符的其中任意一個(gè)
l  .小數(shù)點(diǎn)可以匹配除了換行符(\n)以外的任意一個(gè)字符
l  ^開始
l  $結(jié)束
一些表達(dá)式的作用:
{n}:表示重復(fù)n次,比如"\w{2}" 相當(dāng)于 "\w\w";"a{5}" 相當(dāng)于 "aaaaa"
{m,n}:表示至少重復(fù)m次,最多重復(fù)n次,比如"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"
{m,}:表示至少重復(fù)m次,比如"\w\d{2,}"可以匹配 "a12","_456","M12344"
:匹配表達(dá)式0次或者1次,相當(dāng)于 {0,1},比如"a[cd]?"可以匹配 "a","ac","ad"
+:表達(dá)式至少出現(xiàn)1次,相當(dāng)于 {1,},比如"a+b"可以匹配 "ab","aab","aaab"
*:表達(dá)式不出現(xiàn)或出現(xiàn)任意次,相當(dāng)于 {0,},比如"\^*b"可以匹配 "b","^^^b"。
一些常用小例子舉例:
(1)       檢查手機(jī)號是否合法:/^1(3\d|5[36789])\d{8}$/
說明:手機(jī)號共11位,第一位為1,第二位為3或者5,當(dāng)?shù)诙粸?的時(shí)候,第三位只能是36789中的一個(gè)
(2)       檢查中文名是否合法:/^[\u4e00-\u9fa5]+$/
說明:若不是中文或中文的前后有空格,都認(rèn)為是不合法的
(3)       檢查html標(biāo)記是否匹配:/<(.*)>.*<\/\1>|<(.*) \/>/
說明:如若只出現(xiàn)<html> 而無對應(yīng)的</html>,則檢驗(yàn)結(jié)果是html 標(biāo)記不匹配
(4)       檢查URL格式是否合法:”[a-zA-z]+://[^\s]*”
說明:URL合法格式應(yīng)該以字母連接:// 開頭
(5)       檢查IP格式是否合法:/(\d+)\.(\d+)\.(\d+)\.(\d+)/
說明:IP的格式是點(diǎn)分十進(jìn)制格式,例如:192.168.100.11就是正確的IP
(6)       檢查賬號是否合法:/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
說明:賬號字母開頭,其他位可以有大小寫字母、數(shù)字、下劃線,允許5-16字節(jié)
(7)       檢查QQ號是否合法:/^\s*[.0-9]{5,10}\s*$/
說明:QQ號碼必須是數(shù)字,最長10位
(8)       檢查郵政編碼是否合法:/^[1-9]\d{5}$/
說明:郵編首位不為0,長度是6位的數(shù)字
(9)       檢查身份證號是否合法:/(^\d{15}$)|(^\d{17}([0-9]|X)$)/
說明:身份證號碼為15位或者18位,15位時(shí)全為數(shù)字,18位前17位為數(shù)字,最后一位是校驗(yàn)位,可能為數(shù)字或字符X
2.       數(shù)字控件及時(shí)校驗(yàn)
數(shù)字控件有不為空校驗(yàn),同時(shí)也可以控制其是否允許小數(shù)與父數(shù),還可以設(shè)置數(shù)值的范圍。
3.       日期和時(shí)間控件及時(shí)校驗(yàn)
日期和時(shí)間控件可以設(shè)置其所在范圍,如下圖
4.       下拉框的不為空
對于下拉框、下拉復(fù)選框、下拉樹等下拉選項(xiàng)控件,他們的允許為空設(shè)置除了表示該控件不允許為空值,同時(shí)也可以控制他們的下拉選項(xiàng)中不允許有空選項(xiàng),結(jié)合“空值將顯示為:”一起使用。例如下圖設(shè)置
此時(shí)下拉選項(xiàng)中空值記錄便會顯示為ALL,效果如下
若未選擇任何項(xiàng),確定后編輯其他單元格時(shí)將彈出及時(shí)校驗(yàn)對話框
跨格數(shù)據(jù)及時(shí)校驗(yàn)
在實(shí)現(xiàn)填報(bào)時(shí),有時(shí)需要在編輯完數(shù)據(jù)后跟其他具體某個(gè)格子對比,進(jìn)行及時(shí)校驗(yàn)。當(dāng)報(bào)表中提供的及時(shí)校驗(yàn)不能滿足需求時(shí),可以通過js事件來進(jìn)行及時(shí)校驗(yàn)
1.  連接數(shù)據(jù)庫FRDemo
2.  設(shè)計(jì)模板
2.1 新建報(bào)表
2.2 表樣設(shè)計(jì),如下圖所示
2.3 定義單元格填報(bào)屬性
l  設(shè)置B2的控件類型為數(shù)字,如圖所示
l  設(shè)置B3的控件類型為文本,如圖所示
2.4 事件編輯
l  對B2單元格控件設(shè)置進(jìn)行事件編輯,添加編輯結(jié)束事件:
var D2value = arguments[1].getCellValue("D2");
if (this.getValue() < D2value){
FR.Msg.alert(FR.i18n.Alert, "該值不能小于" + D2Value);
return false;
}
其中,D2value是自定義變量,用于獲得D2單元格的值,if語句是用來判斷該單元格輸入后的值是否小于D2value,如果是則彈出警告:該值不能小于6
l  對B3單元格控件設(shè)計(jì)進(jìn)行事件編輯,添加編輯結(jié)束事件:
var D3value = arguments[1].getCellValue("D3");
if (this.getValue() != D3value){
FR.Msg.alert(FR.i18n.Alert, "該值應(yīng)等于" + D3value);
return false;
}
其中,D3value是自定義變量,用于獲得D3單元格的值,if語句是用來判斷該單元格輸入后的值是否等于D3value,如果不是是則彈出警告:該值應(yīng)等于abc。
3.  保存并預(yù)覽
點(diǎn)擊填報(bào)預(yù)覽,在B2單元格中輸入數(shù)字9,并按回車確定,則彈出警告,如圖
在B3單元格中輸入add,并按回車確定,也彈出校驗(yàn)警告,如圖
擴(kuò)展數(shù)據(jù)的數(shù)據(jù)校驗(yàn)
在填報(bào)模塊中,有時(shí)需要對擴(kuò)展的數(shù)據(jù)進(jìn)行數(shù)據(jù)校驗(yàn),例如:已知商品的價(jià)格,數(shù)量,總額,在填報(bào)提交時(shí)需要對總額進(jìn)行校驗(yàn),看總額是不是等于價(jià)格*數(shù)量。
1.  連接數(shù)據(jù)庫FRDemo
2.  設(shè)計(jì)模板
2.1 新建報(bào)表
新建一張空白報(bào)表,添加數(shù)據(jù)集ds1:SELECT orders.orderid,amount,quantity,price FROM orders,ordersdetail WHERE orders.orderid = ordersdetail.orderid AND orders.orderid<’10006’。然后設(shè)計(jì)成一張如下格式的報(bào)表:
2.2 定義報(bào)表填報(bào)屬性,添加兩個(gè)內(nèi)置SQL,具體設(shè)置如圖
l  內(nèi)置SQL1
l  內(nèi)置SQL2
2.3 定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性
單元格
屬性
B3
文本
C3
文本
D3
文本
E3
文本
2.4 數(shù)據(jù)校驗(yàn)
打開報(bào)表|報(bào)表填報(bào)屬性,選擇數(shù)據(jù)校驗(yàn),插入新的驗(yàn)證信息。校驗(yàn)公式為
D3>=5&&D3<=100,表示D3單元格中的數(shù)據(jù)必須小于5并且小于100,否則數(shù)據(jù)校驗(yàn)時(shí)報(bào)錯(cuò)
3.  保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽,并在BS界面點(diǎn)擊數(shù)據(jù)校驗(yàn),發(fā)現(xiàn)有一條數(shù)據(jù)不符合規(guī)范,報(bào)錯(cuò),如圖
批量修改單元格
在大批量數(shù)據(jù)填報(bào)時(shí),有時(shí)可能需要將置數(shù)單元格整體偏移多行或多列,若手動進(jìn)行修改將會很麻煩,F(xiàn)ineReport提供了批量修改單元格的功能,可以對大批量數(shù)據(jù)進(jìn)行處理。
1.  打開報(bào)表
打開已有報(bào)表
2.  調(diào)整報(bào)表布局
3.  報(bào)表填報(bào)屬性
打開報(bào)表|報(bào)表填報(bào)屬性,如下圖所示
我們發(fā)現(xiàn),修改了樣式后,所有填報(bào)的值對應(yīng)的單元格存在偏差,應(yīng)為A3、B3、C3、D3、E3、F3,此時(shí)一個(gè)一個(gè)的修改可能比較麻煩,我們可以利用批量修改單元格,具體操作如圖
點(diǎn)擊確定后,填報(bào)單元格統(tǒng)一進(jìn)行了修改,如圖
這樣填報(bào)的值對應(yīng)的單元格就通過批量修改單元格修改成功了!
填報(bào)保存值類型
在填報(bào)時(shí)控件類型為日期或者數(shù)字時(shí),如果數(shù)據(jù)庫Oracle中類型與填報(bào)控件中的類型不一致,填報(bào)時(shí)就無法插入數(shù)據(jù),需要對填報(bào)控件進(jìn)行處理才能插入。下面對Oracle數(shù)據(jù)中數(shù)據(jù)類型為Date 和 Number 類型數(shù)據(jù)進(jìn)行填報(bào)介紹。
1.  連接數(shù)據(jù)庫Oracle10g
點(diǎn)擊報(bào)表菜單欄服務(wù)器|自定義數(shù)據(jù)連接,添加數(shù)據(jù)庫,名為Oracle10g,JDBC數(shù)據(jù)庫選擇Oracle,URL為:jdbc:oracle:thin:@192.168.100.169:1521:orcl10g,用戶名為:temp,密碼為:temp123,具體配置如下圖
2.  新建報(bào)表
新建一張空白的表格,添加數(shù)據(jù)ds1: SELECT * FROM temp.testdate
然后設(shè)計(jì)一張如下格式的報(bào)表
3.  定義報(bào)表填報(bào)屬性
自定義如下填報(bào)屬性
4.  自定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性
單元格
屬性
A2
文本
B2
文本
C2
文本
D2
日期
E2
數(shù)字
其中D2單元格的控件需要處理,日期的返回值類型選擇日期
5.  保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器填報(bào)預(yù)覽,如圖
在生日單元格中修改數(shù)據(jù),并提交
提交成功
對于電話填報(bào),Oracle中的數(shù)據(jù)類型是Number時(shí),當(dāng)Oracle中的Number大小小于10位時(shí),填報(bào)中能保存的數(shù)字位數(shù)為Number的大小,即Oracle中Number大小是多少,填報(bào)就能保持幾位;當(dāng)Oracle中的Number大小大于10時(shí),填報(bào)數(shù)字控件只能保存10位數(shù)字。
填報(bào)流水號
在填報(bào)中,批量數(shù)據(jù)處理時(shí)為了方便,需要使用流水號來作為自增長型主鍵進(jìn)行數(shù)據(jù)的更新。在Oracle數(shù)據(jù)庫中,提供了序列的功能,可以通過Oracle的序列及觸發(fā)器,實(shí)現(xiàn)主鍵的自增長。下面具體介紹自增長的實(shí)現(xiàn)。
1.  連接數(shù)據(jù)庫
點(diǎn)擊報(bào)表菜單欄服務(wù)器|自定義數(shù)據(jù)連接,添加數(shù)據(jù)庫oracle10g116, JDBC數(shù)據(jù)庫選擇Oracle,URL為:jdbc:oracle:thin:@192.168.100.116:1521:orcl10g,用戶名為:temp,密碼為:temp123,具體配置如下圖
2.  創(chuàng)建表,序列,觸發(fā)器,插入數(shù)據(jù)
進(jìn)入Oracle數(shù)據(jù)庫的Sqlplus窗口,創(chuàng)建表,序列,觸發(fā)器
l  創(chuàng)建表:create table list (id number,name varchar2(50));
l  創(chuàng)建序列:
create sequence list_seq
minvalue 1           //最小值為1
maxvalue 9999        //最大值為9999
start with 1         //以1為初始值
increment by 1       //以1為增長間隔
cache 20             //緩存大小為20
order;
l  創(chuàng)建觸發(fā)器
create or replace trigger list_tg
before insert on list    //觸發(fā)器依據(jù)的表
for each row             //逐行觸發(fā)
begin                    //觸發(fā)器主體
select list_seq.nextval into:new.id from dual;
end;
l  插入數(shù)據(jù)
insert into list values(‘’,’aaa’);
insert into list values(‘’,’bbb’);
l  提交
commit;
3.  模板設(shè)計(jì)
3.1  新建模板
3.2  表樣設(shè)計(jì)
新建一張空白的表格,添加數(shù)據(jù)ds1: SELECT * FROM temp.list
然后設(shè)計(jì)一張如下格式的報(bào)表
3.3  定義報(bào)表填報(bào)屬性
自定義如下填報(bào)屬性
3.4  自定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性
單元格
屬性
B1
文本
B2
文本
4.  填報(bào)并預(yù)覽
點(diǎn)擊設(shè)計(jì)器填報(bào)預(yù)覽,ID列實(shí)現(xiàn)了自增長
在NAME控件中填入cccc,并提交,顯示填報(bào)成功
再次刷新,ID列自增長
填報(bào)自動匹配值
在填報(bào)中,有時(shí)需要在輸入一個(gè)數(shù)據(jù)后,自動從數(shù)據(jù)庫中獲取對應(yīng)的數(shù)值,自動匹配至
相應(yīng)的單元格,這樣就避免了填報(bào)時(shí)手動一個(gè)一個(gè)輸入,該例子主要是通過寫公式實(shí)現(xiàn)。
1.  新建報(bào)表
2.  報(bào)表設(shè)計(jì)
如下設(shè)計(jì)報(bào)表
單元格
公式
說明
B3
=range(1,10)
設(shè)置從上到下擴(kuò)展,批量插入10條數(shù)據(jù)
D2
=if(len(C3)==0,"",sql("FRDemo","SELECT customername FROM customer WHERE customerid = "+C3,1,1)
查詢表customer獲得對應(yīng)id的姓名
E2
=if(len(C3)==0,"",sql("FRDemo","SELECT country FROM customer WHERE customerid = "+ C3,1,1))
同上
F2
=if(len(C3)==0,"",sql("FRDemo","SELECT city FROM customer WHERE customerid = "+ C3,1,1))
同上
G2
=if(len(C3)==0,"",sql("FRDemo","SELECT tel FROM customer WHERE customerid = "+ C3,1,1))
同上
3. 控件設(shè)置
右擊C3單元格|控件設(shè)置,控件類型選擇下拉框,具體設(shè)置如下
D3至H3單元格控件類型設(shè)置為文本,如下圖
4. 填報(bào)屬性設(shè)置
打開菜單報(bào)表|報(bào)表填報(bào)屬性,如下圖所示設(shè)置
5. 將A2列寬設(shè)置為零,進(jìn)行隱藏
6. 保存模板,點(diǎn)擊填報(bào)預(yù)覽
在客戶編號中選中相應(yīng)的編號,后面的客戶姓名,國家,城市,電話會自動匹配,如下圖所示,只需要輸入金額數(shù)值即可入庫
選擇客戶編號后點(diǎn)擊其他地方,后面的信息就會自動匹配進(jìn)來。
7. 批量匹配數(shù)據(jù)
同時(shí)若我們將需要的客戶編號寫入excel文件中,導(dǎo)入到頁面中,就可以批量的匹配數(shù)據(jù)了
l  在報(bào)表|報(bào)表Web屬性|填報(bào)頁面設(shè)置中,給默認(rèn)的工具欄加上excel導(dǎo)入按鈕。
l  新建一個(gè)excel,在C3至C12中輸入1至10
l  點(diǎn)擊填報(bào)預(yù)覽,導(dǎo)入該excel,導(dǎo)入后,即會批量進(jìn)行置數(shù)。
文本域換行
在填報(bào)中,有時(shí)需要輸入大量的文本,這時(shí)就需要用到文本域這個(gè)控件,但在用這個(gè)控件時(shí),換行不能直接按Enter鍵,必須按Ctrl+Enter,才能達(dá)到換行的效果。
1.       新建報(bào)表
新建一張空白的表格,添加數(shù)據(jù)ds1: SELECT * FROM employee WHERE empid=‘1001‘
然后設(shè)計(jì)一張如下格式的報(bào)表
2.       定義報(bào)表填報(bào)屬性
定義如下填報(bào)屬性
3.       定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性:
單元格
屬性
C2
文本
C4
文本
E2
文本域
4.       保存并填報(bào)
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽
在員工地址文本域中輸入地址,換行時(shí)用Ctri+Enter鍵,不能用Enter鍵(Enter鍵使用后表示清空)
下拉框的快速查詢
在填報(bào)控件或者參數(shù)控件的下拉框類型控件中,下拉框有快速查詢的功能,即輸入部分值之后自動將符合條件的值顯示出來。
1.  連接數(shù)據(jù)庫FRDemo
2.  設(shè)計(jì)模板
2.1  新建模板
2.2  表樣設(shè)計(jì),具體樣式如下圖所示
2.3  定義報(bào)表填報(bào)屬性,具體設(shè)置如圖
2.4  定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性
單元格
屬性
A2
文本
B2
文本
C2
文本
D2
下拉框
E2
文本
D2單元格控件設(shè)置的類型是下拉框,具體如圖
3.  保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器的填報(bào)預(yù)覽,如下圖所示
在城市的下拉框中,輸入W會出來所有以W開頭的城市名,這就是下拉框的快速查詢功能,預(yù)覽如圖所示
行式報(bào)表
在填報(bào)時(shí),有時(shí)行式填報(bào)希望能從數(shù)據(jù)庫取出來的行不能編輯,只能編輯通過添加行產(chǎn)生新的行,F(xiàn)R報(bào)表軟件可以通過條件屬性來設(shè)置
1.       新建報(bào)表
新建一張空白的表格,添加數(shù)據(jù)ds1: SELECT * FROM employee
然后設(shè)計(jì)一張如下格式的報(bào)表
2.       定義報(bào)表填報(bào)屬性
自定義如下填報(bào)屬性
3.       自定義單元格填報(bào)屬性
單元格分別定義如下填報(bào)屬性
單元格
屬性
B2
文本
C2
文本
D2
文本
E2
文本
F2
文本
A2的填報(bào)屬性可以用條件屬性設(shè)置
4.       條件屬性設(shè)置
右擊A2單元格,選擇條件屬性,進(jìn)入條件屬性窗口,添加條件屬性,屬性選擇空間,并選中使用控件,編輯,控件類型選擇文本,并添加公式(row()-1)>rowcount(“ds2”)
該公式表示,如果當(dāng)前行號大于數(shù)據(jù)集中的總行數(shù),則行號控件可用,具體如圖
5.       填報(bào)并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽,如下圖,從數(shù)據(jù)庫中取出來的行的行號是不可編輯的
在BS界面上選中最后一行,并在上方的工具欄中點(diǎn)擊增加記錄,新出現(xiàn)一行,該行的行號可編輯,如圖
用戶自定義填報(bào)
在填報(bào)時(shí),個(gè)別用戶為了需求,需要自定義填報(bào)。FR報(bào)表在報(bào)表web屬性中的填報(bào)頁面設(shè)置中可以自定義填報(bào)功能
1.  連接數(shù)據(jù)庫FRDemo
2.  設(shè)計(jì)報(bào)表
2.1  新建報(bào)表
2.2  表樣設(shè)計(jì)
添加一個(gè)名為ds1的數(shù)據(jù)庫查詢:SELECT * FROM customer,表樣設(shè)計(jì),如圖
2.3  自定義報(bào)表填報(bào)屬性
2.4  定義單元格填報(bào)屬性
單元格
屬性
A1
文本
B1
文本
2.5  自定義報(bào)表Web屬性
點(diǎn)擊菜單欄報(bào)表|報(bào)表Web屬性,進(jìn)入報(bào)表Web屬性窗口,在填報(bào)頁面設(shè)置欄目中,將左邊需要顯示的按鈕拖到中間的窗口中,并在右邊窗口添加加載結(jié)束事件,實(shí)現(xiàn)自定義的填報(bào)功能,如圖所示
在加載結(jié)束事件窗口中添加事件的JS代碼
具體js代碼如下
var $toolbar = $('.FR-ToolBar-disabled > table > tbody > tr');
var option = {
//"icon": "css:x-emb-email",
"listeners": [ {"once": false,
"action": function(e){
var xml = _g('${SessionID}').generateReportXML();
$.ajax({
url : "test.jsp",
type : 'POST',
data : {op : 'test1', sessionID : '${SessionID}',
reportXML : xml},
complete : function(res, status) {
FR.showDialog("Relation", 300, 400, res.responseText);
}})
},
"eventName": "click"
}],
"text": "測試",
"invisible": false,
"type": "button",
"disabled": false,
"render": true};
$button = $('<div></div>');
FR.comp.create($button, "button", option);
$tc = $("<td>").append($button);
$toolbar.append($tc);
此段JS代碼引用了一個(gè)test.jsp,代碼為:
<%@ page import="com.fr.web.CustomSubmit" %>
<%@ page contentType="text/html" %>
<%
CustomSubmit.dealWithTest(request, response);
%>
將該test.jsp文件放在設(shè)計(jì)器安裝的WebReport目錄下。
該test.jsp文件又引用了一個(gè)CustomSubmit類,將該類編譯后的.class文件放在
%WebReport\WEB-INF\classes\com\fr\web目錄下,該類的代碼具體如下
package com.fr.web;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fr.base.ColumnRow;
import com.fr.report.Report;
import com.fr.report.core.FormReport;
import com.fr.report.core.PackedReport;
import com.fr.web.ParameterConsts;
import com.fr.web.core.SessionDealWith;
import com.fr.web.core.SessionIDInfor;
import com.fr.web.core.WebUtils;
public class CustomSubmit {
public static void dealWithTest(HttpServletRequest req, HttpServletResponse res) throws Exception {
String sessionID = WebUtils.getHTTPRequestParameter(req,ParameterConsts.SESSION_ID);
SessionIDInfor sessionIDInfor = SessionDealWith.getSessionIDInfor(sessionID);
List cellRelation = new ArrayList();
for(int i = 0, len = sessionIDInfor.getWorkBook2Show().getReportCount(); i < len; i++) {
Report report = sessionIDInfor.getWorkBook2Show().getReport(i);
if (report instanceof FormReport && report instanceof PackedReport) {
Report fr = (PackedReport)report;
//請注意這步,我想要取的是A1和B1兩個(gè)格子擴(kuò)展以后的他們之間關(guān)系和值,如果是想拿A1,B1,D5,對應(yīng)添加ColumnRow.valueOf("D5")既可
List rl = ((FormReport)report).getExtendColumnRowList(new ColumnRow[] {ColumnRow.valueOf("A1"), ColumnRow.valueOf("B1")});
for (int c = 0, cl = rl.size(); c < cl; c++) {
ColumnRow[] crs = (ColumnRow[])rl.get(c);
ColumnRowValue[] crvs = new ColumnRowValue[crs.length];
for (int index = 0, il = crs.length; index < il; index++) {
crvs[index] = new ColumnRowValue(crs[index], fr.getCellValue(crs[index].column, crs[index].row));
}
cellRelation.add(crvs);
}
}
}
//cellRelation 里面存放著擴(kuò)展以后的格子之間的關(guān)系和格子的值
//以111.cpt模板為例,數(shù)據(jù)列擴(kuò)展后城市NewYork對應(yīng)ID 1和4,在cellRelation里面就是 cellRelation.get(0)和cellRelation.get(1),對應(yīng)著兩個(gè) ColumnRowValue[]
//第一個(gè)ColumnRowValue數(shù)組的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B1,Value是1
//第二個(gè)ColumnRowValue數(shù)組的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B2,Value是4
if (cellRelation.size() > 0) {
PrintWriter writer = WebUtils.createPrintWriter(res);
for (int i = 0, len = cellRelation.size(); i < len; i++) {
ColumnRowValue[] crvs = (ColumnRowValue[])cellRelation.get(i);
StringBuffer sb = new StringBuffer();
for (int v = 0, vl = crvs.length; v < vl; v++) {
if (v != 0) {
sb.append(" ");
}
sb.append(crvs[v].toString());
if (v == vl - 1) {
sb.append("<br />");
}
}
writer.println(sb.toString());
}
writer.flush();
writer.close();
}
}
public static class ColumnRowValue {
private ColumnRow cr;
private Object value;
public ColumnRowValue(ColumnRow cr, Object value) {
this.cr = cr;
this.value = value;
}
public ColumnRow getColumnRow() {
return cr;
}
public Object getValue() {
return value;
}
public String toString() {
return new StringBuffer().append(cr.toString()).append(":").append(value.toString()).toString();
}
}
}
3.  保存并預(yù)覽
點(diǎn)擊填報(bào)預(yù)覽,BS界面除了FR報(bào)表自帶的提交按鈕和數(shù)據(jù)校驗(yàn)按鈕外,還多了一個(gè)測試按鈕
點(diǎn)擊測試按鈕,出現(xiàn)測試界面
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
快、準(zhǔn)、狠!秒殺Excel的報(bào)表工具,十分鐘教你做好數(shù)據(jù)填報(bào)
使用ActiveReports報(bào)表服務(wù)器創(chuàng)建并發(fā)布報(bào)表設(shè)計(jì)報(bào)表布局
你還在用Excel? 用這工具,5步完爆Excel表格
Excel ActiveX 控件到底有啥用?如此美貌的下拉菜單,非它不可
Spread for Windows Forms高級主題(2)
不想再被報(bào)表需求煩到炸,4個(gè)妙招讓你實(shí)現(xiàn)批量制表
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服