最近遇到一個需求需要動態(tài)把grid復選框列變成單選框,先上復選grid代碼
查詢了kendoUI的官方文檔得到解釋
查詢大佬們博客發(fā)現(xiàn):
selectable :Boolean | String 選中表格的設置猾警,默認false禁止選中堪藐,字符串‘row’表示可以選中一行,‘cell’ 表示可以選中一列顽素,‘multiple, row’表示可以選中多行亡嫌,‘multiple, cell’表示可以選中多列运沦。
所以當時想利用這個屬性,來進行動態(tài)變化涮母。
方案一? ?通過動態(tài)改變grid的selectable屬性并重新加載grid來實現(xiàn)復選變單選谆趾。
var??selectCheckBox = "multiple,rowbox";
用一個全局變量selectCheckBox來動態(tài)改變 grid 屬性 selectable: selectCheckBox,
function changeBox(type) {
????if (type == xxx) {
? ? ? ? return "multiple,rowbox”;
????} else {
? ? ? ? return "single,rowbox";
????}
}
用一個函數方法來動態(tài)改變 grid 屬性 selectable: changeBox(type)叛本,
結果發(fā)現(xiàn)selectable屬性只會在頁面載入時候取一次值或調用一次function函數沪蓬,后續(xù)就算改變全局變量和手動刷新grid也無法觸發(fā)函數重新調用。我嘗試使用$('#company_grid').data('kendoGrid').dataSource.page(1) 和 $('#company_grid').data('kendoGrid').refresh() 去觸發(fā)grid重新加載炮赦,間接重新加載grid的selectable屬性怜跑,發(fā)現(xiàn)沒有效果,如果有可以實現(xiàn)重新加載selectable屬性的方法請留言告知我,萬分感謝性芬!峡眶。
方案二? 給復選框綁定點擊事件,通過控制事件讓勾選失效達到復選變單選植锉。
給grid的標題行復選框添加點擊事件辫樱,使其失去勾選功能。
$("#company_grid thead>tr th span.k-checkbox").click(function (e) {
? ? return false;
});
給grid的明細行添加綁定事件,但是我一直沒有給明細行前復選框綁定上點擊事件俊庇,在函數中添加console.log()也沒有打印狮暑。
$("#company_grid tbody td.k-checkbox").click(function (e) {
? ? return false;
});
通過谷歌瀏覽器查看Jquery選擇器是否獲取到復選框,發(fā)現(xiàn)已獲取到辉饱,但是僅僅是標題行的有效果搬男,明細行一直沒效果。筆者也一直沒找到原因彭沼,如果有人知道也請留言告知缔逛,再次感謝!姓惑。
方案三? 由于前面方案總是棋差一招褐奴,只能劍走偏鋒。創(chuàng)建兩個grid一個selectable屬性是多選于毙,另一個grid的selectable屬性是單選敦冬。兩個grid同時綁定一個數據源,保證數據統(tǒng)一唯沮,根據選擇條件隱藏一個脖旱,顯示一個。
至此單復選框的動態(tài)切換就實現(xiàn)了烂翰,這種實現(xiàn)方式比較Low但是效果達到了夯缺,如果有大佬有好的實現(xiàn)方式蚤氏,請留言告知甘耿。
參考文章鏈接:
官方文檔
https://docs.telerik.com/kendo-ui/api/javascript/ui/grid/configuration/columns.selectable
博客文檔