apex如何單排?
在做表格時(shí),我們經(jīng)常有這樣的需求,那就是把report的第一列設(shè)成單選框,這樣用戶可以通過勾選這些單選框,來(lái)選擇需要集中進(jìn)行操作的行,以進(jìn)行批量刪除或是修改。
在APEX中,這樣的單選框可以通過apex_item包中的checkbox函數(shù)來(lái)實(shí)現(xiàn)。
函數(shù)原型如下:
APEX_ITEM.CHECKBOX(
p_idx IN NUMBER,
p_value IN VARCHAR2 DEFAULT NULL,
p_attributes IN VARCHAR2 DEFAULT NULL,
p_checked_values IN VARCHAR2 DEFAULT NULL,
p_checked_values_delimitor IN VARCHAR2 DEFAULT :,
p_item_id IN VARCHAR2 DEFAULT NULL,
p_item_label IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;
在apex中,單選框選中后的值會(huì)存儲(chǔ)到一個(gè)內(nèi)部集合之中,這個(gè)集合可能是個(gè)聯(lián)合數(shù)組,具體實(shí)現(xiàn)不太清楚,但是這些集合最多只能有50個(gè),也就是說(shuō),不同種類的單選框只能有50種。
p_idx參數(shù)就是指明到底是用第幾個(gè)內(nèi)部集合,如果你要?jiǎng)?chuàng)建一個(gè)大型的應(yīng)用,其中很多頁(yè)面要用到單選框,這樣你就得找個(gè)地方記一下哪個(gè)集合對(duì)應(yīng)于哪個(gè)頁(yè)面或是場(chǎng)合,否則若是不同的場(chǎng)合用到了同一個(gè)集合,極有可能會(huì)導(dǎo)致數(shù)據(jù)出問題。
p_value 用來(lái)指示該存儲(chǔ)什么數(shù)據(jù),在具體應(yīng)用時(shí),這個(gè)一般是某個(gè)主鍵列。
p_attributes可以是Checked和Unchecked兩種,用來(lái)指示單選框的初始選擇狀態(tài)。
p_checked_values與p_checked_values_delimitor結(jié)合,用來(lái)指定初始狀態(tài)下那些單選框被默認(rèn)選擇或不選。p_value值如果在p_checked_values中出現(xiàn),則單選框呈現(xiàn)p_attributes所指定的狀態(tài),例如如果p_value此時(shí)是10, p_checked_values是10:20,p_attributes是checked,那么因?yàn)閜_value現(xiàn)在在p_checked_values之中,則此單選框呈現(xiàn)p_attributes所指定的勾選狀態(tài),而p_checked_values_delimitor則是用來(lái)分隔p_checked_values中各個(gè)值的分隔符,這里是個(gè)冒號(hào)。
p_item_id和p_item_label用來(lái)指定此單選框在html代碼里面的id屬性,應(yīng)該在使用javascript時(shí)會(huì)有不小的用途。
那么我們?cè)撊绾蔚玫絾芜x框所選擇的值呢,apex提供了apex_application包,在此包里,我們可以得到如下的集合變量APEX_APPLICATION.G_F01,這里G_F01就存儲(chǔ)了被勾選的所有單選框的值,G_F是前綴,而01則是p_idx所指定的值,當(dāng)然因?yàn)樽疃嘀荒苡?0個(gè)不同的集合,所有只能有G_F01到G_F50可用。
以下代碼摘自http://www.apex-
blog.com/oracle-apex/adding-a-checkbox-to-your-report-apex_item-tutorial-30.html
展示了如何挨個(gè)讀取每個(gè)集合元素的值,然后進(jìn)行dml操作,非常直觀簡(jiǎn)單。BEGIN
FOR i in
1..APEX_APPLICATION.G_F01.COUNT
LOOPUPDATE emp
SET ticked = Y
WHERE empno = APEX_APPLICATION.G_F01(i);
END LOOP;
COMMIT;
END;
以下例子示范了如何讓部門號(hào)是10的員工行被勾選:
SELECT APEX_ITEM.CHECKBOX(1,empno,DECODE(deptno,10,CHECKED,NULL)) Select,
ename, job
FROM emp
ORDER BY 1
以下例子示范了如何讓部門號(hào)是10與20的員工行被勾選:
SELECT APEX_ITEM.CHECKBOX(1,deptno,NULL,10:20,:) Select,
ename, job
FROM emp
ORDER BY 1