1. 程式人生 > >GridView在不寫後端程式碼繫結資料來源且無資料的情況下顯示腳註行Footer的新方法

GridView在不寫後端程式碼繫結資料來源且無資料的情況下顯示腳註行Footer的新方法

        記錄一下今天解決的一個需求,GridView在頁面上用SqlDataSource控制元件配置資料來源直接繫結,不用後臺程式碼動態繫結,然後為了方便插入資料,在參考了各位大佬的博文後,採用了在欄位的腳註行裡插入文字框控制元件,收集各列的資料,然後在後臺用SqlDataSource的插入引數配置之後,直接insert方法完成新記錄的入庫。

        理想是美好的,但現實總是有點扭曲。這個新記錄插入方法在資料來源有資料的時候很好使,因為只要設定了showfooter=true,腳註行就能顯示。但是如果沒資料的時候,腳註行就消失了,這簡直就是反人類啊,明明沒資料才是最需要你出現的時候,但你偏偏消失了。而且表頭有個ShowHeaderWhenEmpty屬性可以解決無資料顯示錶頭的問題,偏偏沒有對應的showFooterWhenEmpty來解決無資料顯示腳註行的需求。

        於是又參觀了幾個大牛的相關問題的博文,發現他們要麼是動態繫結資料來源,監測資料條數為0就自動插入一個空白新行,把無資料變成有資料,以此來解決需求。但本著能偷懶就不寫後臺程式碼的原則,這個方法就沒法套用了。另外還有一個方法也有點類似,但是能保持資料來源還是aspx頁面裡配置的,有點偷樑換柱意思,就是在PreRender裡檢查是否有資料,沒有資料就用一個同樣列框架的DataTable插入一個空行並替換掉SqlDataSource,最終使GridView變成有資料;但這個替換還要有個還原的操作,在Page_Load裡,每次都要把SqlDataSource設定回來,不然資料來源就不統一了。這個方法的確也能解決問題,但設定太複雜。

        因為實在沒有更好地偷懶的方法了,所以自己研究了一下,思路都差不多,要想讓Footer模板顯示,唯一的方式就是在SqlDataSource無資料時,能夠插入一個空行,這就變成有資料了,自然就能顯示Footer了。上面幾種方式的思維都是正向的,在發現沒資料時才想盡辦法插一條,但可惜GridView和SqlDataSource都不能手動加空白資料,所以只能更換資料來源。於是我乾脆來個逆向思維,為什麼不能在SqlDataSource查詢資料的時候就直接加一個空行進來呢?所以到這裡,一切問題都解決了,只需要在SqlDataSource的查詢SQL裡用UNION整合一條空白資料進來即可,完美解決無資料而造資料的問題。

        具體程式碼就不寫了,核心思路就是從資料來源頭保證至少會有一條空資料存在,這樣在GridView裡空白資料顯示的只是末行的空白而已,無傷大雅,而Footer行也能自動出現了。如果你有強迫症或者資料列裡有控制元件,顯示出來不優雅,沒關係,也容易解決,在行資料繫結的事件裡檢查一下當前資料行是不是鍵值為空,是就讓當前行的Visible=false就好了。