nonNetStorage.drugVarGrid0 = $('#medicalGrid0').datagrid({ url : '', idField : 'categoryid', fitColumns :true, rownumbers:true, nowrap:false, checkOnSelect : false, rowStyler:function(index,row) { return 'background-color:#fff;color:black'; }, height : document.body.clientHeight-223, columns:[[ {field:'drugName',title:'名称',width:'20%'}, {field:'manufactorId',title:'生产厂商id',width:'20%',hidden:true, editor : {type : 'textbox', options:{}}, }, { field : 'manufacturerName', title : '生产厂商名称', width : '20%', editor:{ type:'combobox', width:'80px', options:{ valueField: 'manufactorName', textField: 'manufactorName', editable : false, panelHeight : '81', required:true, onSelect:function(record) { //根据选择哪个,然后将id设置到 manufactorId 列里面。 var ed = nonNetStorage.drugVarGrid0.datagrid('getEditor', {index:editIndex,field:'manufactorId'}); $(ed.target).textbox('setValue',record.manufactorId); } } } } ]], onClickCell : function(index,field,value) { // 点击一行,动态获取下拉框值,然后将数据塞入下拉框 onClickRow(index,nonNetStorage.drugVarGrid0); } }); // 这里跟你说个点,下拉框最好用两个编辑列,一个隐藏, // 一个用来显示下拉字段。如上两个列: // 生产厂商id // 生产厂商名称 // 之所以这么做,是因为你在点击保存的时候,下拉框里面的汉字保存过程会变成id // 所以显得不好看。 function onClickRow(index,datagrid){ //这里代码就是重点,网格加载好一行一行数据以后,当你点击某一行 //他就传进editIndex if (editIndex != index){ if (endEditing(datagrid)){ //判断上一行是否把必填填写完毕。 datagrid.datagrid('selectRow', index).datagrid('beginEdit', index); //生产企业要根据id获取对应生产企业 var rowDatas = datagrid.datagrid('getRows'); //获取网格全部数据 var ed = datagrid.datagrid('getEditor', {index:index,field:'manufacturerName'}); //加上面if判断,结果回来的时候,看不到原先的值,所以只能点击一次请求一次后台 $.post("drugVarietyInfoAction/queryDrugManufactor?categoryid=" + rowDatas[index].categoryid, [], function(data) { $(ed.target).combobox('loadData',data); }, 'json'); editIndex = index; } else { //上一行必填没填写完,强制让其填写。 datagrid.datagrid('selectRow', editIndex); } } }