一、是否允許用戶(hù)對(duì)記錄進(jìn)行重排序?
當(dāng)從數(shù)據(jù)庫(kù)中讀取記錄然后反映在表格中,有很多地方可以控制記錄的排序。在不排序的情況下,從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)的時(shí)候是根據(jù)記錄創(chuàng)建的時(shí)間先后順序反映在前臺(tái)的表格中。為了控制顯示的順序,數(shù)據(jù)庫(kù)管理員可以在數(shù)據(jù)庫(kù)層面上,針對(duì)這張表格創(chuàng)建一張視圖,并在視圖中設(shè)置排序規(guī)則,來(lái)改變默認(rèn)的排序順序。這張方式效率比較高,但是也比較死板。因?yàn)橹挥袛?shù)據(jù)庫(kù)管理員才能夠更改這個(gè)排序規(guī)則。其次在Java平臺(tái)中,將相關(guān)的SQL語(yǔ)句傳遞給數(shù)據(jù)庫(kù)以獲取想要的數(shù)據(jù)時(shí),也可以利用order by關(guān)鍵字來(lái)設(shè)置排序的順序。不過(guò)這跟數(shù)據(jù)庫(kù)層面上設(shè)置一樣,也有一個(gè)致命的缺陷,即這個(gè)排序規(guī)則必須預(yù)先設(shè)置好。如果用戶(hù)不滿(mǎn)意當(dāng)前的排序規(guī)則,則必須要系統(tǒng)管理員或者開(kāi)發(fā)人員幫忙才能夠更改排序方式。顯然這兩個(gè)排序方式都不是很靈活。
其實(shí)用戶(hù)需要的是在前臺(tái)應(yīng)用程序窗口中,可以根據(jù)需要對(duì)任何一個(gè)字段進(jìn)行排序。如點(diǎn)擊某個(gè)字段名字,就根據(jù)這個(gè)字段名進(jìn)行排序。在Java平臺(tái)創(chuàng)建表格的類(lèi)中,本身就已經(jīng)集成了重新排列的功能。如在創(chuàng)建表格的時(shí)候,可能需要用到一個(gè)JTableHeader類(lèi)(可以用這個(gè)類(lèi)創(chuàng)建不支持滾動(dòng)條的表格),在這個(gè)類(lèi)中,有一個(gè)setRecorderingAllowed方法,其會(huì)有true與false兩個(gè)返回值。如果這個(gè)方法返回的時(shí)true,則表示允許用戶(hù)在這個(gè)表格上對(duì)記錄進(jìn)行重新排序。如果返回的是false的話(huà),則表示用戶(hù)無(wú)法在表格上對(duì)記錄進(jìn)行重新排序。如果不滿(mǎn)意現(xiàn)在的排序規(guī)則,只有要求系統(tǒng)管理員或者開(kāi)發(fā)人員在后臺(tái)更改排序規(guī)則。
對(duì)這個(gè)排序規(guī)則的設(shè)置,筆者有一個(gè)建議。首先程序開(kāi)發(fā)人員或者數(shù)據(jù)庫(kù)管理人員要根據(jù)用戶(hù)常見(jiàn)的需求,即最常用的排序規(guī)則來(lái)進(jìn)行設(shè)置。如此的話(huà),用戶(hù)一打開(kāi)前臺(tái)表格,就可以得到自己想要的排序方式。然后在表格上也允許用戶(hù)進(jìn)行重新排序。當(dāng)用戶(hù)有需要的時(shí)候,可以輕易實(shí)現(xiàn)按任何一個(gè)字段進(jìn)行排序。筆者認(rèn)為這種排序規(guī)則比較合理。在實(shí)際應(yīng)用程序開(kāi)發(fā)中,筆者也是如此做的。不過(guò)這里需要注意一點(diǎn),如果查詢(xún)出來(lái)的紀(jì)錄比較多,此時(shí)即使在前臺(tái)對(duì)記錄進(jìn)行排序,效率也會(huì)比較低。為此對(duì)于大記錄的表格,筆者的建議是在數(shù)據(jù)庫(kù)設(shè)計(jì)或者應(yīng)用程序開(kāi)發(fā)中,就要評(píng)估用戶(hù)最常常用的排序規(guī)則。如在產(chǎn)品信息窗口中,可以按關(guān)鍵字或者產(chǎn)品類(lèi)別進(jìn)行排序。如此就可以最大程度的減少二次排序,提高應(yīng)用程序的性能。
二、是否允許對(duì)表格中的內(nèi)容進(jìn)行編輯?
在表格創(chuàng)建的時(shí)候,還需要注意是否允許用戶(hù)對(duì)表格中的數(shù)據(jù)進(jìn)行更改。對(duì)于這一點(diǎn)程序開(kāi)發(fā)人員也可以在多個(gè)層面對(duì)其進(jìn)行控制。如某個(gè)表格對(duì)于任何用戶(hù)來(lái)說(shuō)都是只讀的,只允許應(yīng)用程序?qū)ζ溥M(jìn)行更新,那么就可以在數(shù)據(jù)庫(kù)層面進(jìn)行控制。如對(duì)于系統(tǒng)日志表格來(lái)說(shuō),用戶(hù)就不能夠進(jìn)行更改,只有查詢(xún)。為此就可以針對(duì)這張表格創(chuàng)建一張只讀的視圖,供用戶(hù)查詢(xún)使用。而應(yīng)用程序在更新的時(shí)候,則直接更新對(duì)應(yīng)的基礎(chǔ)表格。這就是通過(guò)在數(shù)據(jù)庫(kù)層面對(duì)表格中的內(nèi)容是否允許編輯進(jìn)行控制。
除此之外,還可以通過(guò)權(quán)限來(lái)進(jìn)行控制。如可以在數(shù)據(jù)庫(kù)中設(shè)置不同的用戶(hù)、不同的權(quán)限來(lái)控制前臺(tái)表格對(duì)應(yīng)的后臺(tái)數(shù)據(jù)庫(kù)表格的讀寫(xiě)權(quán)限。在應(yīng)用程序中,也可以控制對(duì)這張表格中內(nèi)容的編輯能力。默認(rèn)情況下,利用Java提供的現(xiàn)有類(lèi)創(chuàng)建表格時(shí),是允許用戶(hù)對(duì)表格中的內(nèi)容進(jìn)行編輯的。如用戶(hù)只要雙擊單元格,就可以對(duì)表格中的內(nèi)容進(jìn)行更改。如果系統(tǒng)管理員不希望用戶(hù)對(duì)表格中的內(nèi)容進(jìn)行更新,則就需要重構(gòu)JTable類(lèi)中的isCellEdittable方法。默認(rèn)情況下,這個(gè)方法返回的值是true,表示允許用戶(hù)對(duì)其進(jìn)行更改。如果返回的時(shí)false的話(huà),在禁止用戶(hù)對(duì)單元格進(jìn)行編輯。
新聞熱點(diǎn)
疑難解答
圖片精選