`
kidiaoer
  • 浏览: 824762 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

xt中combobox在grid显示问题

阅读更多
xt中combobox在grid显示问题

问题描述:我在edit grid中嵌一个combox,combox的下拉单是文字的,但是提交时用数字代码表示。但是我的grid只显示数字代码,不显示对应的文字.
嘿嘿,这可问题对于我这样的初学者讲根本就不懂,呵呵,google了一下,找到解决办法,嘿嘿,不过我只是试验了一种成功,其它的要么就不成功,要么就看不懂,呵呵,我现在先把我做成功的代码贴出来(从网上找到,大家不要介意):
第一种方案(我做成功了,嘿嘿)
来源:http://blog.sina.com.cn/s/blog_4992583a0100bvwr.html
首先,我的combobox是使用本地的字典表,即在namespace里定义的数据.数据结构为:

Ext.data.status = [
['1', 'Yes'],
['0', 'No']
]


我要实现的是在grid中显示字典表里对应的value,而不是code.需要有下面几个步骤:


1.定义ds,即引入字典表中的数据

var statusDS = new Ext.data.SimpleStore({ //通过字典表获得用户使用状态数据源
fields: ['code', 'value'],
data:Ext.data.status //这里对应我在字典表里定义的类型名称
});


2.在grid相应列中加入渲染,即修改ColumnModel某列属性,红色字体部分是核心代码

{
header: '<s:text name="com.label.username"/>',
dataIndex: 'userName',
width: 90,
align: 'center'
},{
header: '<s:text name="com.label.authority"/>',
dataIndex: 'userAuthority',
width: 60,
align: 'center',
editor: new Ext.form.ComboBox({
id:'statusCmb', //为combobox定义一个ID,必须的
hiddenName:'',
store: statusDS, //引入ds
displayField:'value', //值
valueField:'code', //代码
editable:false,
mode: 'local',
triggerAction: 'all'
}),
renderer: function(value, cellmeta, record) {

//通过匹配value取得ds索引
var index = statusDS.find(Ext.getCmp('statusCmb').valueField,value);

//通过索引取得记录ds中的记录集
var record = statusDS.getAt(index);

//返回记录集中的value字段的值
return record.data.value;//注意这个地方的value是上面displayField中的value,因为我水平低,搞了好长时间 才明白 ,呵呵
}
},{
header: '<s:text name="com.label.email"/>',
dataIndex: 'email',
width: 150,
align: 'center'
}

以上的代码只是根据我个人情况实现的,大家应用到自己程序时可能会有变动,还得随机应变啊

这是人家的后来我需要在grid中显示出上面的效果自写改了一下,把代码发上来:

//物料数据源

   var materialDs = new Ext.data.JsonStore({

   fields: ['matId','matName'],

   url: '../combobox.do?action=getBaseMaterialComboBox',

   autoLoad: true

   })

//初始化物料名称Combobox

   var materialCombo = new Ext.form.ComboBox({

   name: 'matName',

   fieldLabel: '物料名称',

   store:materialDs,

   valueField: 'matId',

   displayField: 'matName',

   typeAhead: true,

   mode: 'local',//这个意思 我一直不明白,呵呵。

   triggerAction: 'all',

   emptyText: 'Select a inputNum name..',

   selectOnFocus: true,

   editable: false,

   allowBlank: false

   })

{header: '物料名称',dataIndex: 'matId',width: 170,sortable: true,renderer:function(value,cellmeta,record){

   var index =materialDs.find(materialCombo.valueField,value);

   var record = materialDs.getAt(index);

   return record.data.matName;

   }},

这种方式我不知道好不好,但我没办法,只能这样用,因为我只能想到这种方法。有更好的方法大家可以告诉我,谢谢。

第二种方案(这种方案比较简单,学习一下,呵呵):

来源:http://www.iteye.com/topic/157067

{header:'单位',dataIndex:'Unit',sortable:true,width: 80,renderer:function(value){return value==1?'西药':'重要';},
editor: new Ext.form.ComboBox({
displayField:'kind',emptyText:'请选择',
valueField:'abbr',
selectOnFocus:true,
triggerAction: 'all',
mode: 'local',
store: new Ext.data.SimpleStore({
fields: ['abbr', 'kind'],
data:[[1,'西药'],[2,'中药']]
}),
lazyRender:true
})},

第三种方式(是我从一个论坛上找的http://www.vifir.com,一个留言,我没试验,不知道能否成功,呵呵):

renderer:function(value){ return t_value[value];//值对应的显示值数组},
listeners:{select:function(combo, record,index){ //回显值数组
t_value[record.data.t_valueId] = record.data.t_valueName; } },

第四种方式 (也是我从上面的论坛中找的,这个很乱,我把上面一个大侠的留言给贴上吧,呵呵):

1、呵呵,这个问题其实很好办的哈。因为你要手动设置combox的值,给你看一个例子:
writePanel.fp.form.load({
waitMsg:"$!{lang.get('Loading')}",
url:this.baseUrl+"?cmd=read&id="+id,
success:function(form){
if(record.data.myCategory){
writePanel.fp.form.findField("myCategory").setValue(record.data.myCategory.id);
writePanel.fp.form.findField("myCategory").el.dom.value=record.data.myCategory.name;//text
var oEditor = FCKeditorAPI.GetInstance('content') ;
if(oEditor)oEditor.SetHTML(form.findField("content").getValue());
}
}
});
上面的程序是从后台加载表单数据到FormPanel中,由于combox的处理比较特殊,需要通过下面两句来给他手动赋值:
writePanel.fp.form.findField("myCategory").setValue(record.data.myCategory.id);
writePanel.fp.form.findField("myCategory").el.dom.value=record.data.myCategory.name;//text

2、我的意思是,你在修改的时候,得手动设置一下combox的值。

对于你的情况,由于返回的record.data.name = '2' ,那么你就要先在[[1,a],[2,b][3,c]]这个数组中查询,查询2这个值对应的显示文本,也就是查到B。然后你再调用下面的语句:
cmb.setValue(2);
cmb.el.dom.value=B;
这就就对了!
3、{header:'用户名',dataIndex:'name',renderer:function(val){
//在这里return通过val(就是那个id)获取的name的值
return combostore.getAt(combostore.find('id',val)).data.name;
}}
4、
目前这个问题已经解决了
girdpanel.cm加上了一个
renderer: function(value, p, record) {
return value.name;
}
分享到:
评论

相关推荐

    Ext ComboboxGrid

    ComboboxGrid将这两者融合,使得用户可以在输入框中输入关键字搜索,同时下拉展示匹配的网格数据,便于多维度筛选和选择。 这个组件主要包含以下几个关键知识点: 1. **Ext JS框架**:Ext JS是一个流行的...

    Extjs4下拉菜单ComboBox中用Grid显示通用控件

    在EXTJS4中,`ComboBox` 是一个非常常用的组件,它提供了一个下拉选择框的功能。在某些场景下,我们可能需要在下拉菜单中展示更丰富的信息,比如表格数据,这时就可以使用 `GridComboBox`。`GridComboBox` 结合了 `...

    显示多列的combobox

    标题“显示多列的ComboBox”涉及到一个常见的需求,即如何在一个下拉列表中展示多列数据,以便用户能更直观、全面地了解选项。这种扩展的ComboBox通常用于显示复杂的数据结构,例如数据库中的表格记录。 在传统的...

    easyui datagrid 行编辑中combogrid和combobox显示问题

    修改上一个资源版本中结束编辑时combobox显示问题. 1、类型为combogrid时每行的参数不同查询返回对应的数据结果。 2、类型为combobox时,输入框显示图标按钮,实现对应的事件。 3、解决类型为combobox显示为value而...

    C#中实现在combobox显示图标

    为了在ComboBox中同时显示图标和文本,我们需要自定义控件或使用第三方库。下面我们将详细探讨如何在C#中实现这个功能,以VS2008工程为例。 首先,我们需要创建一个自定义的ComboBox类,继承自System.Windows.Forms...

    Combobox下拉列表显示图片.zip

    在Windows Forms应用程序中,Combobox默认只支持显示文本,但通过自定义绘制或者使用第三方控件,我们可以实现显示图片与文本结合的效果。这里主要介绍两种常见的方法: 1. **自定义DrawItem事件**: - 你可以重写...

    在wpf中把枚举显示在combobox中

    要将枚举显示在ComboBox中,我们需要执行以下步骤: 1. **定义枚举**:首先在代码中定义枚举。比如: ```csharp public enum Color { Red, Green, Blue } ``` 2. **创建视图模型**:为了实现数据绑定,我们需要...

    extjs4 ComboBox 点击下拉框 出现grid效果

    在实际项目中,你应该根据需求选择合适的库版本,并通过`ext.js`或`ext-dev.js`引入EXTJS的核心库,然后根据需要引入其他组件,比如ComboBox和Grid。 总结来说,EXTJS4的ComboBox可以通过自定义事件处理和组件嵌套...

    解决combobox随窗口变化大小后不显示下拉列表问题

    然而,在某些情况下,特别是在用户界面(UI)动态调整大小时,Combobox可能会出现不显示下拉列表的问题。这个问题可能是由多种原因引起的,包括布局管理、控件重绘、事件处理等。以下将详细介绍这个问题及其解决方案...

    C# combobox里面显示checkbox

    然而,有时候我们可能需要在ComboBox中不仅显示文本,还需要显示复选框,以便用户可以选择多个选项。这种功能可以增强用户界面的交互性,使得多选操作更加直观。本文将详细探讨如何在C#的ComboBox中实现显示复选框的...

    VB.Net自己写的一个控件:ComboBox下拉列表中显示多列数据

    VB.Net开发一个小程序时候,用到一个显示多列的ComboBox,而且从数据库中取出来的数据表要绑定到一个ComboBox中。找来找去,找不到。上Baidu Google很多人说:在VB.Net中的ComboBox只能绑定一列数据。以前的VBA和VB的...

    .net C# PropertyGrid 显示下拉列表

    在本文中,我们将讨论如何在 .NET 中使用 PropertyGrid 控件来显示下拉列表,并实现编辑表的各种属性。我们将通过一个自定义控件 CheckedListBoxUC 来实现这个功能。 PropertyGrid 控件是 .NET 中一个功能非常强大...

    Delphi在stringGrid控件中嵌入Combobox下拉框

    4. **处理交互**:在Combobox的OnDropDown事件中,可以设置其可见性,使其只在需要时显示下拉列表。而在OnCloseUp事件中,更新StringGrid的单元格值,以反映用户的选择。 5. **释放Combobox**:当不再需要Combobox...

    可以显示多列数据的ComboBox

    在标准的ComboBox中,通常只显示一个列的数据,即文本项。然而,在某些场景下,为了提供更丰富的信息展示,我们可能需要一个能够显示多列数据的ComboBox。这就是"可以显示多列数据的ComboBox"的概念。 这个特殊的...

    C# WinForm 自定义ComboBox 显示颜色下拉框

    1. **自定义ComboBox控件**:在.NET Framework中,ComboBox是标准的控件,用于显示一个可选列表。但是,系统默认的ComboBox并不支持直接显示颜色。为了实现颜色显示,我们需要创建一个新的类,继承自System.Windows....

    ComBoBox下拉框图片文字显示源码

    在显示时,`DrawItem`事件会自动触发,绘制图片和文字。 6. **静态控件图片显示** 提到"实现Static控件图片的显示效果",这可能是指在ComboBox的下拉列表中,每个项的背景可能是一个静态控件(CStatic)。这种情况...

    C# ComboBox(winform) 显示多列 输入自动过滤

    在C# WinForm开发中,ComboBox控件是常用的交互元素,用于展示一组可选项供用户选择。然而,标准的ComboBox通常只支持单列显示,并且其内置的过滤功能较为简单。在某些场景下,我们可能需要自定义ComboBox,使其具备...

    Combobox输入拼音显示汉字

    Silverlight combobox,实现输入拼音显示对应的所有的汉字 具体描述请参考 http://blog.csdn.net/u010254787/article/details/29359703

    在combobox控件中添加图标

    首先在窗体中添加一个comboBox1和一个imageList(本例中带有三个图片) this.comboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;

    WPF 在listview中如何实现Combobox的下拉菜单绑定Demo

    2. **DataTemplate**:用于定义ListView中每个Item的显示样式,可以包含复杂的UI元素,如ComboBox。 3. **Binding**:WPF的数据绑定机制,使得UI元素的属性与后台数据模型的属性之间建立连接。 4. **...

Global site tag (gtag.js) - Google Analytics