datagrid行編輯如何?級聯?,datagrid實現
還是級聯的問題,不過這一次,是在datagrid裡,那麼難度上肯定比form中的級聯要高。
但是只要熟練掌握了datagrid的API,問題還是很容易就可以解決的。
關鍵點在於——editor,關於datagrid實現編輯功能全要靠它。
先實現行編輯
比如在datagrid中要實現某一列可編輯,那麼需要在那一列的column中配置editor屬性
editor的配置可以只指定type,也就是編輯框的類型,可以是combobox,datebox等easyUI配備的一些類型
若對這些編輯框有額外的屬性,需要在editor中再配置一個options的json,比如options:{data:[{1:'a'},{2:'b'}]}等
實現了行編輯,下面才能基於行編輯實現級聯。
實現航編輯級聯
這裡我們先來說一個具體的需求吧,比如編輯行中有一個接受和拒絕的下拉框,選了拒絕之後需要填寫拒絕理由,也就是說若選擇接受,拒絕理由那一列是不可編輯的。
怎麼做呢?思路還是和form中的級聯一樣,也就是在選中的(onSelect)事件中來控制,這個倒簡單,關鍵是如何來得到拒絕理由那一列並將其設定成不可編輯的?
還記得前面講的editor嗎?我們配置的editor是可以通過行索引(index)+ 欄位名(field)來得到的,試試吧
比如拒絕理由那一欄的field是reason,那麼我們根據編輯行索引editIndex和field就可以得到改單元格的editor了
var editor = $('#dg').datagrid('getEditor', {index:editIndex, field:'reason'})
之後可以通過editor.target來得到easyUI的組件,如combobox之類。然後再調用combobox.combobox('disable')就可以將那一列設定為不可編輯了。
之前我們form表單級聯舉的省市級聯的例子也可以用類似的思路來做,這裡就不贅述了。
做到這一步就結束了嗎?那麼我們只處理了選中事件中的級聯控制,那麼若是儲存之後再編輯呢?此時值已經存在於row中了,並不會觸發onSelect事件,那麼如何完善這些步驟呢?
需要完善的步驟
首先,每次“編輯開始”的時候都要檢查主combobox中的值是否為拒絕,若是,則將級聯項設定為可編輯,否則不可編輯
其中“編輯開始”包括append方法和onRowClick方法
其次,每次主combobox的onSelect事件時都要檢查選中的是否為拒絕,若是,則將級聯項設定為可編輯,否則不可編輯
這樣就完成datagrid行編輯的級聯。
題外話
其實若是不熟悉datagrid的API的話,想實現級聯那是太麻煩了。
我之前就是不知道有editor的API,然後就自己手動去擷取元素做級聯,
類似於這樣的語句:$("[field='isout']", $(".datagrid-body")).nextAll().find('.textbox input:first').attr("disabled", "disabled");
實在是麻煩且容易出錯
DEV控制項Grid中可以設定下拉列每行綁定不同資料來源? 就是想實現Grid中下拉框的級聯顯示
之前我有做過,但是最後失敗了。
發現下拉列的資料來源是綁定在列上的。
如果想讓每行綁定不同的資料來源,那隻能是選中某行更換資料來源了。
但是一旦更換資料來源,之前所選擇的資料就會發生變化。
最後我就在列頭附近另外弄了個下拉框。每當行變化時下拉框的資料來源也發生變化。從這個下拉框選擇資料,複製給當前行的這個需要下拉的列
因為這時候資料來源不是綁定在列上,所以選擇好的資料不會被改變。
怎在datagrid行編輯,combobox聯動時,改變後面combobox的編輯模式
你有具體代碼?我這個是當選第一個框,第二框聯動的,這個我實現啦,關鍵是我想實現同時可以當我選第一個框中其他值時,改變第二個框的編輯方式,用geteditors不好使啊 查看原帖>>