Ext1.X的CheckboxSelectionModel預設全選之後不允許編輯的BUG解決方案,ext 的CheckboxSelectionModel在後臺預設選中之後,前臺就不允許編輯的bug是存在的,因為CheckboxSelectionModel沒有Disabled="true"的設定,只能想辦法彌補,畢竟不能直接給GridPanel設定Disabled="true"這樣的話,整個GridPanel都成灰色的了,顯然不能滿足使用者的需求,不科學的介面如圖:
那麼怎麼樣處理這個問題呢。
思路:選中之前進行判斷,假如為滑鼠點選不進行任何選中操作,但是如果後臺預設選中,第一次點選的時候不會觸發前臺js事件,這就成了一個問題,所有要想辦法,讓後臺資料設定完之後前臺在繫結一次全部預設。但問題有來了,經過測試,如果想要第一次觸發js攔截事件,必須前臺手動點選觸發才可生效(奇葩的Ext)。那就在GridPanel點選之前,去實現吧。程式碼如下(後臺設定開關按鈕還是沒有任何問題的):
function myBeforeRowSelect(SelectionModel, rowIndex, keepExisting, record) { if (event != null && event.keyCode == 0) { return false; } } function onSelectAll() { var model = Ext.getCmp("GridPanel1").getSelectionModel(); model.selectAll(); }
<Listeners> <CellMouseDown Fn="onSelectAll" /> </Listeners> <SelectionModel> <ext:CheckboxSelectionModel ID="CheckboxSelectionModel1" runat="server" HideCheckAll="true"> <Listeners> <BeforeRowSelect Fn="myBeforeRowSelect" /> </Listeners> </ext:CheckboxSelectionModel> </SelectionModel>
後臺設定CheckboxSelectionModel方法:
// 選中 RowSelectionModel sm = Grid.SelectionModel.Primary as RowSelectionModel; sm.SelectedRows.Add(new SelectedRow(第幾行)); sm.UpdateSelection(); // 非選中 RowSelectionModel sm = Grid.SelectionModel.Primary as RowSelectionModel; sm.DeselectRow(第幾行);
over~