首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

EasyUI DataGrid Combobox 聯動完整實現:編輯行動態加載與值回填

     編輯:程式設計綜合問答

核心場景

DataGrid 編輯行中,Combobox A (NMJ04) 選值後,聯動加載 Combobox B (NMJ05) 並回填 TextBox C (NMJ06)。

完整 onSelect 實現

onSelect: function(record) {
    // 1. 獲取當前編輯行索引
    var row = $('#dd').datagrid('getSelected');
    var rowIndex = $('#dd').datagrid('getRowIndex', row);
    
    // 2. 獲取 Combobox B 編輯器(注意:返回對象需 .target 轉 jQuery)
    var editorB = $('#dd').datagrid('getEditor', { index: rowIndex, field: 'NMJ05' });
    var $comboB = $(editorB.target);
    
    // 3. 清空並重新加載 Combobox B
    $comboB.combobox('clear');
    var url = '/handler/spouseinfo.ashx?flag=getValueNMK06&t=' + record.id;
    $comboB.combobox('reload', url);
    
    // 4. 異步獲取 NMJ06 值並回填 TextBox
    $.ajax({
        url: '/handler/getNMJ06.ashx',  // 返回純文本或 JSON {value: '...'}
        type: 'POST',
        data: { id: record.id },
        success: function(val) {
            var editorC = $('#dd').datagrid('getEditor', { index: rowIndex, field: 'NMJ06' });
            $(editorC.target).val(val);  // TextBox 直接 val()
        },
        error: function(xhr) { console.error('NMJ06 獲取失敗', xhr); }
    });
}

關鍵技術點

優化建議:統一 AJAX 獲取所有聯動值

onSelect: function(record) {
    var rowIndex = $('#dd').datagrid('getRowIndex', $('#dd').datagrid('getSelected'));
    $.ajax({
        url: '/handler/getLinkedData.ashx',
        data: { id: record.id },
        success: function(data) {  // data: { comboB: [...], textC: '...' }
            // 更新 Combobox B
            var $comboB = $($('#dd').datagrid('getEditor', {index:rowIndex, field:'NMJ05'}).target);
            $comboB.combobox('loadData', data.comboB);
            // 回填 TextBox C
            $($('#dd').datagrid('getEditor', {index:rowIndex, field:'NMJ06'}).target).val(data.textC);
        }
    });
}

減少網絡請求,保證數據一致性,體驗更流暢。

新增行特殊處理

// 新增按鈕點擊
$('#dd').datagrid('appendRow', { NMJ04: '', NMJ05: '', NMJ06: '' });
var newIndex = $('#dd').datagrid('getRows').length - 1;
$('#dd').datagrid('beginEdit', newIndex);
// 可選:預載默認數據源
var $comboB = $($('#dd').datagrid('getEditor', {index:newIndex, field:'NMJ05'}).target);
$comboB.combobox('loadData', defaultComboBData);

掌握 getEditor 返回值結構、combobox('reload'/'loadData') 差異、統一 AJAX 協同更新,構建穩健的 DataGrid 聯動編輯體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
點說明
getEditor 返回值對象 {target: DOM, actions: ..., type: 'combobox'},需 $(editor.target) 包裝
Combobox reloadcombobox('reload', url) 會發起請求並自動解析 JSON 數據源
新增行 row 為 null新增時 getSelected() 返回新行數據(含默認值),非 null。若確為 null,用 getEditor 直接操作
編輯行初始化onBeforeEdit 中預載 Combobox 數據源,避免用戶等待