【easyui】datagrid的combobox动态添加数据源求解

firegunner 2012-11-06 11:28:17
诸位,我在用easyui的可编辑datagrid的时候,每一行的combobox的数据源需要动态获取并且需要combobox能级联操作,而非页面初始时即初始化,我现在已经实现动态获取数据和级联操作,但当我endEdit的时候,编辑的那一行显示是combobox的key,而非value。请问如何处理?


但当我结束这一行编辑的时候,显示的不是combobox的text,而是显示的是combobox的value

请问,我该如何处理,才能让结束编辑后,显示的是combobox的text?
求解!各位大仙!
一下是局部代码:

<table id="detailTable" style="width:auto;height:auto"
title="采购明细">
<thead>
<tr>
<th data-options="field:'categoryId',width:120,align:'center',
editor:{
type:'combobox',
options:{
valueField:'superId',
textField:'superName',
required:true
}
}">类别
</th>
<th data-options="field:'brandId',width:120,align:'center',
editor:{
type:'combobox',
options:{
valueField:'superId',
textField:'superName',
required:true
}
}">品牌
</th>
<th data-options="field:'productionId',width:120,align:'center',
editor:{
type:'combobox',
options:{
valueField:'id',
textField:'name',
required:true
}
}">产品
</th>
<th data-options="field:'storeId',width:120,align:'center',
editor:{
type:'combobox',
options:{
valueField:'superId',
textField:'superName',
required:true
}
}">仓库
</th>
<th data-options="field:'price',width:70,align:'center',editor:'numberbox'">单价</th>
<th data-options="field:'count',width:70,align:'center',editor:'numberbox'">数量</th>
<th data-options="field:'total',width:70,align:'center',editor:'numberbox'">总价</th>
<th data-options="field:'prePay',width:70,align:'center',editor:'numberbox'">预付</th>
</tr>
</thead>
</table>


var lastIndex;
$('#detailTable').datagrid({
toolbar:[{
text:'新增',
iconCls:'icon-add',
handler:function(){
$('#detailTable').datagrid('endEdit', lastIndex);
$('#detailTable').datagrid('appendRow',{
categoryId:'',
brandId:'',
productionId:'',
storeId:'',
price:'',
count:'',
total:'',
prePay:''
});

lastIndex = $('#detailTable').datagrid('getRows').length-1;
$('#detailTable').datagrid('selectRow', lastIndex);
$('#detailTable').datagrid('beginEdit', lastIndex);

synchCategory(getEditRow(lastIndex,'categoryId'),lastIndex);

synchStore(getEditRow(lastIndex,'storeId'));
}
},'-',{
text:'编辑',
iconCls:'icon-remove',
handler:function(){
var row = $('#detailTable').datagrid('getSelected');
if (row){
var index = $('#detailTable').datagrid('getRowIndex', row);
$('#detailTable').datagrid('deleteRow', index);
}
}
},'-',{
text:'删除',
iconCls:'icon-remove',
handler:function(){
var row = $('#detailTable').datagrid('getSelected');
if (row){
var index = $('#detailTable').datagrid('getRowIndex', row);
$('#detailTable').datagrid('deleteRow', index);
}
}
}],
onClickRow:function(rowIndex){
if (lastIndex != rowIndex){
$('#detailTable').datagrid('endEdit', lastIndex);
$('#detailTable').datagrid('beginEdit', rowIndex);
}
lastIndex = rowIndex;
}
});

// 异步加载类别,并在选中后,级联加载品牌(Brand)的combobox
function synchCategory(editRow,index){
$(editRow.target).combobox('reload','category/findSuperCategoryByAjax.action?date='
+ new Date().getTime());
$(editRow.target).combobox({onSelect:function(){
synchBrand(getEditRow(index,'brandId'),index,$(this).combobox('getValue'));
}});
}

// 异步加载品牌,并在选中后,级联加载商品(Production)的combobox
function synchBrand(editRow,index,categoryId){
jQuery(editRow.target).combobox('reload','brand/findSuperBrandByAjax.action?categoryId=' + categoryId + '&date='
+ new Date().getTime());

$(editRow.target).combobox({onSelect:function(){
synchProduction(getEditRow(index,'productionId'),index,$(this).combobox('getValue');
}});
}

// 加载品牌(production)
function synchProduction(editRow,index,brandId){
jQuery(editRow.target).combobox('reload','production/findProductionByAjax.action?brandId=' + brandId + '&date=' + new Date().getTime());
}

// 加载仓库
function synchStore(editRow){
jQuery(editRow.target).combobox('reload','store/findSuperStoreByAjax.action?date='
+ new Date().getTime());
}

// 获取需要编辑的控件
function getEditRow(lastIndex,field){
return category = jQuery('#detailTable').datagrid('getEditor', {
index : lastIndex,
field : field
});
}
...全文
12980 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jan9983 2015-06-30
  • 打赏
  • 举报
回复
17楼正解,测试通过了!
ttonily 2014-12-10
  • 打赏
  • 举报
回复
加个formatter属性,判断选择后的value值,对应返回一个你要的字符串就ok了 {field:'Status',title:'确认状态',width:50,formatter:function(value,row){ if(value == 1){ return '是'; }else if(value == 0){ return '否'; } }, editor:{ type: 'combobox', options:{ editable: false, panelHeight: 50, data: [{ value:'1', text:'是' },{ value:'0', text:'否', }] } } }
皮卡兵 2013-12-25
  • 打赏
  • 举报
回复
easyui的datagrid本来就是这样的,但你可以用以下方法解决:: <script type="text/javascript"> var comboboxData;//项目与部门 field内的combobox data var depOrProId;//content内的combobox data 与上面的comboboxData级联 $(function() { //输入url获得data,用于获得combobox的值 var _url='${pageContext.request.contextPath}/userController/getDepAndProByUid?userId=${sessionInfo.id}'; $.ajax({ url:_url, type:'get', async:false,//此处必须是同步 dataTye:'json', success:function(data){ comboboxData=data; } }) $('#Diarydg') .datagrid( { view : detailview, url : "${pageContext.request.contextPath}/diaryController/dataGrid", toolbar : "#tool", border : false, pagination : true, fitColumns : true, singleSelect : true, onClickRow: onClickRow, fit : true, columns : [ [ { field : 'pd', title : '项目与部门', width : 100, formatter:function(value,rowData,rowIndex){//格式化该字段内的显示 for(var i=0; i<comboboxData.length; i++){ if(comboboxData[i].value==value){ depOrProId=comboboxData[i].value; return comboboxData[i].label; } } return ""; }, editor:{ type:'combobox', options:{ valueField:'value', textField:'label', data:comboboxData } } }, 希望您能看懂
  • 打赏
  • 举报
回复
想知道楼主是怎么解决的,我也遇到同样的问题了!!!
wellway 2013-09-12
  • 打赏
  • 举报
回复
哪位大侠知道,在easyui动态获取数据后,怎么在页面设置它的小数位数,如这样展示38,072.9115
蒾途笑笑生 2013-04-17
  • 打赏
  • 举报
回复
获取更改后的值,重新赋值给列表
蒾途笑笑生 2013-04-17
  • 打赏
  • 举报
回复
var ed = $('#dg).datagrid('getEditor', {index:editIndex,field:'name'}); var nameVal= $(ed.target).combobox('getText'); $(ed.target).combobox('setValue', nameVal);
dreamqingdao 2013-01-31
  • 打赏
  • 举报
回复
能否拜读你的后台代码?
涵月冰菱 2012-12-19
  • 打赏
  • 举报
回复
引用 9 楼 DyGan 的回复:
引用 5 楼 nanjue921 的回复: “ valueField:'id', ”改成 valueField:'name', 。 这个可以。
这样改了以后还能取到ID吗?
dugangandy 2012-12-13
  • 打赏
  • 举报
回复
引用 5 楼 nanjue921 的回复:
“ valueField:'id', ”改成 valueField:'name', 。
这个可以。
叫我三三 2012-12-12
  • 打赏
  • 举报
回复
textField:'Text',设置显示的内容 valueField:'Value',设置显示内容对于的值
叫我三三 2012-12-12
  • 打赏
  • 举报
回复
我以前写的你可以参照

 <input id="S_faultType" class="easyui-combobox" name="language" style="width:150px;"
	data-options="
	 url:'../../Handler/Statistics.ashx?Type=ft',
	 valueField:'Value',
	 textField:'Text',
	 multiple:false,
	 panelHeight:'auto',
         onSelect: function(rec){  
              $('#S_faultName').combobox('setValues', '');
              var url = '../../Handler/Statistics.ashx?Type=fn&Value='+rec.Value;  
              $('#S_faultName').combobox('reload', url);  
         }
 " />
         <input id="S_faultName" class="easyui-combobox" name="language" style="width:150px;"
		data-options="
		valueField:'Value',
		textField:'Text',
		multiple:true,
		panelHeight:'300'
		" />
我这2级联动,下面那个根据上面选的值改变而改变
风一样的大叔 2012-12-12
  • 打赏
  • 举报
回复
你后台数据库怎么写的呀?
Wannn0905 2012-11-15
  • 打赏
  • 举报
回复
“ valueField:'id', ”改成 valueField:'name', 。
Wannn0905 2012-11-15
  • 打赏
  • 举报
回复
editor:{ type:'combobox', options:{ valueField:'id', textField:'name', required:true }
lingyu50 2012-11-06
  • 打赏
  • 举报
回复
尝试formatter 数据源如果没加载到,就只会显示原有值,即你说的ID
  • 打赏
  • 举报
回复
一定是你打开的方式不对
firegunner 2012-11-06
  • 打赏
  • 举报
回复
点击【新增】按钮的时候,关闭(endEdit)当前选中行的编辑状态,这个时候本来combobox里面显示的text,全都变成了combobox的value。
最新版本的jQuery EasyUI 1.3.6版全中文API汉化文档火热出炉,由于很多人和我要chm格式的,所以本次API我提供了2种版本的API,一个还是以前的EXE格式,另外一个就是人气颇高的chm格式。本次还将EasyUI 1.3.6版直接提供到API包里面,方便没有去官网下载的人直接使用。请大家持续关注我发布的资源,不出意外,我是会一直持续更新本API文档的。本次更新内容大约有30个,Bug修复的只有2个,剩下的全是新增内容,EasyUI的控件已经越来越好用了,顶一个。但是希望能把性能也提升提升,总是感觉在某些情况下EasyUI的性能不是太好。具体更新内容请看下面的说明: jQuery EasyUI 1.3.6版本更新内容: Bug(修复) treegrid:修复“getChecked”方法不能正确的返回被选择的行的问题; tree:修复在“onlyLeafCheck”属性为true时,复选框无法在异步树种正确显示的问题。 Improvement(改进) treegrid:所有的选择和选中的方法都扩展自datagrid组件; linkbutton:添加图标对齐功能的完整支持,可用值有:“top”、“bottom”、“left”、“right”; linkbutton:添加“size”属性,可用值有:“small”、“large”; linkbutton:添加“onClick”事件; menubutton:添加“menuAlign”属性,该属性允许用户设置顶级菜单对齐; combo:添加“panelAlign”属性,可用值有:“left”、“right”; calendar:添加“formatter”、“styler”和“validator”属性,这些属性允许用于自定义日历日期; calendar:添加“onChange”事件; panel:添加“method”、“queryParams”和“loader”选项; panel:添加“onLoadError”事件; datagrid添加“onBeginEdit”事件,该事件在一个行进入编辑模式时触发; datagrid添加“onEndEdit”事件,该事件在完成编辑但是编辑器尚未销毁之前触发; datagrid添加“sort”方法和“onBeforeSortColumn”事件; datagrid:将“combogrid”编辑器集成到datagrid中; datagrid添加“ctrlSelect”属性,在启用多行选择的时候允许使用Ctrl键+鼠标点击的方式进行多选操作; slider:添加“converter”属性,该属性允许用户决定如何将一个值转换为进度条位置或进度条位置值; searchbox:添加“disabled”属性; searchbox:添加“disable”、“enable”、“clear”、“reset”方法; spinner:添加“readonly”属性、“readonly”方法和“onChange”事件。
jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签 1.3.6更新 Bug treegrid: getChecked方法不能返回正确的行. fixed. tree: 异步树,在onlyLeafCheck:true时复选框不显示正确. fixed. Improvement treegrid:继承datagrid组件所有的selecting和checking方法。 linkbutton:图标对齐方式,支持值:'top','bottom','left','right'。 linkbutton:添加"size"属性,支持值:'small','large'。 linkbutton:添加的onClick事件。 menubutton:添加"menuAlign"属性,允许用户设置顶级菜单对齐。 combo:添加"panelAlign"属性,支持值:'left','right'。 calendar:"formatter"、"styler"和"validator"选项可用于自定义日历日期。 calendar:添加的onChange事件。 panel:添加"method","queryParams"和"loader"属性。 panel:添加"onLoadError"事件。 datagrid:添加"onBeginEdit"事件。 datagrid:添加"onEndEdit"事件。 datagrid:添加"sort"方法和"onBeforeSortColumn"事件。 datagrid:"combogrid"编辑器集成到datagriddatagrid:添加"ctrlSelect"属性,允许使用ctrl+click 多选 slider:添加"converter"选项,允许用户决定如何将一个值转换为滑块的位置或滑块位置值。 searchbox:添加"disabled"属性。 searchbox:添加"disabled","enable","clear","reset"方法。 spinner:添加"readonly"属性、"readonly"方法和"onChange事件。
例行更新,不过本次有新组件加入,感觉这次的组件早就应该有了,居然到现在才加入进来,不管怎么说有总比没有好。这次还是以改进为主,改进项占了大多数。废话不多说具体内容大家看更新说明吧!另外由于经常收到chm格式文件无法用的反馈,其实不是无法用,只是要授权。虽然已经解释多遍,但是依然有人不知道,索性就取消chm格式的文档了,今后统一采用exe+pdf格式,由于目前尚无时间制作pdf格式的api文档,所以1.5版中只有exe的,pdf格式将在下一版中提供。 jQuery EasyUI 1.5版本更新内容: Bug(修复) combobox:修复在加载包含所选项数据的时候不会触发“onSelect”事件的BUG; datagrid:修复在字段设置为一个空值的时候导致在某些情况下“updateRow”方法无法正常工作的BUG。 Improvement(改进) 一个label标签可以被关联到任意表单的字段上; combobox:改进在下拉项中“select”和“unselect”的规则; combobox添加“limitToList”属性来限制只能输入在列表项中的内容; combogrid:允许用户快速克隆组件; form:添加“dirty”属性,允许用户只发送变更的字段内容; form:添加“resetDirty”方法; datagrid:允许用户在没有数据的时候显示一条消息(比如:无记录); textbox:添加“label”、“labelWidth”、“labelPosition”和“labelAlign”属性; spinner:添加“spinAlign”属性; calendar:允许用户在日历组件上显示周数(今年的第几周); window:添加“constrain”属性。 New Plugin(新组件) passwordbox:该插件允许用户在具有更好交互功能的输入框中输入密码; combotreegrid:该插件结合了combobox和treegrid组件。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧