需求的產生:公司要求用系統對產品價格實現全球控管,在價格管理模組要求動態產生輸入表單,其效果就像Excel的操作一樣,具體見:
“1”控制紅框範圍內表單“2”的產生(不同產品線有不固定數量的產品所致)
“3”控制藍框範圍內表單“4”的產生(不同產品在同一段時間內定價策略各異)
解決方案:
“2”中除“4”部分表單採取Web控制項
“4”中表單採取Html代碼類比。
經過摸索發現,動態產生的Web控制,只要控制項ID相同,重新整理之後是可以保留狀態資訊的(先在Aspx的Page中加入EnableViewState=true),所以現在要解決的問題就是需要有一個隱藏控制項ItemCount記錄有多少個“2”產生了,ItemCount是拉進來的非動動的控制項,狀態資訊可以保留,所以“1”所做的動作其實就是給ItemCount的記數自加,然後在Page_Load的時候迴圈產生“2”,記得所有控制項應該有規律(控制項類型_控制項意義_行號)的產生標識即控制項ID。
“3”對“4”的產生需要用Hmtl代碼來類比,原本想過也用Web控制項,最終研究的結果是動態控制項中的動態控制項沒有辦法保留狀態資訊,所以這裡的狀態資訊以及表單本身都只能類比出來。所以又要拖進來一個控制項PriceValue來儲存價格資訊,儲存格式“行號1,價錢1,日期1|行號2,價錢2,日期2……”,後台要完成兩個動作,一個是拼出如此格式的字串,另外就是根據資料庫的價格資訊類比出價格輸入表單。要注意的就是,任何一個價格表單的改動都應該觸發一個用戶端指令碼,重新遍曆一下所有的價格表單,然後重寫PriceValue的資訊,這樣才能保證價格資訊即時儲存下來,才人會在頁面重新整理的時候丟失。
雖然上面講的很簡單,但實際開發的時候有許多細節需要考慮,比如一個簡單的刪除可能就會打亂規律,要作特殊處理,另外圖片選擇資訊使用者也要求保留(檔案選擇框一刷檔案選擇資訊就沒了,天經地義)……最後這一個頁面的後台編碼寫了近三千行,實在是很失敗,但使用者想要的都實現了,使用者卻滿意了……