steelcombogird.js
/**
*
* 部分特定配置方法如下(其他的和ComboBox一样):
* ------------------------------------------
* 如果需要对grid有特殊的配置,请使用 gridCfg 配置项
* url: [必须] 数据源url
* columns:[必须] grid的cm
* displayField : [必须] 显示对应的列 默认为 text
* valueField : [必须] 值对应的列 默认为 value
* paging: [可选] 是否分页 默认false不分页
* fields: [可选] store的数据列、默认是根据columns的dataIndex构造出了的
* ------------------------------------------
* @extends Ext.form.ComboBox
*/
Ext.SteelComboGrid = Ext.extend(Ext.form.ComboBox, {
steel:1,
JSONSTORE_ROOT:null,
JSONSTORE_TOTALPROPERTY:null,
doQuery: function(q, forceAll) {
q = Ext.isEmpty(q) ? '': q;
var qe = {
query: q,
forceAll: forceAll,
combo: this,
cancel: false
};
if (this.fireEvent('beforequery', qe) === false || qe.cancel) {
return false;
}
q = qe.query;
forceAll = qe.forceAll;
if (forceAll === true || (q.length >= this.minChars)) {
if (this.lastQuery !== q) {
this.lastQuery = q;
this.selectedIndex = -1;
this.store.clearFilter();
this.onLoad();
} else {
this.selectedIndex = -1;
this.onLoad();
}
}
},
onLoad: function() {
if (!this.hasFocus) {
return;
}
if(this.isExpanded()){
this.collapse();
}
this.expand();
this.restrictHeight();
if (this.lastQuery == this.allQuery) {
if (this.editable) {
this.el.dom.select();
}
if (this.autoSelect !== false && !this.selectByValue(this.value, true)) {
this.select(0, true);
}
} else {
if (this.autoSelect !== false) {
this.selectNext();
}
if (this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE) {
this.taTask.delay(this.typeAheadDelay);
}
}
},
listeners:{
expand:function(){
alert(this.el.dom.value);
this.grid.render('steel-'+this.getId());
this.grid.store.removeAll ();
//此处可以改成axj从后台得到数据
if(1==this.steel){
var cbJson ={totalProperty:5, root:[
{functionId:'1',functionName:'夫人',type:'woman'},
{functionId:'2',functionName:'桃花',type:'woman'},
{functionId:'3',functionName:'杏花',type:'woman'},
{functionId:'4',functionName:'梨花',type:'woman'},
{functionId:'5',functionName:'梅花',type:'woman'}]};
this.grid.store.loadData(cbJson.root,true);
this.grid.store.JSONSTORE_ROOT=cbJson.root;
this.grid.store.JSONSTORE_TOTALPROPERTY=cbJson.totalProperty;
}
if(2==this.steel){
var cbJson = [
{functionId:'1',functionName:'夫人',type:'woman'},
{functionId:'2',functionName:'桃花',type:'woman'}];
this.grid.store.loadData(cbJson,true);
}
this.steel++;
}
},
store : new Ext.data.SimpleStore({
fields : [],
data : [[]]
}),
editable : this.editable||false,
mode : 'local',
emptyText : this.emptyText||"请选择",
allowBlank : this.allowBlank||true,
blankText : this.blankText||"必须输入!",
triggerAction : 'all',
anchor : '50%',
displayField : 'text',
valueField : 'value',
tpl : '',
selectedClass : '',
grid: null,
/**
* grid的配置参数【可选】
* @type
*/
gridCfg:{},
url: '',
//grid 的 Store
gridStore:null,
paging:false,
fields: [],
columns: [],
gridColumns: [],
initComponent : function() {
var me = this;
Ext.SteelComboGrid.superclass.initComponent.call(this);
this.tpl = "<tpl for='.'><div id='steel-"+this.getId()+"'></div></tpl>";
//如果没有定义fields 按照columns初始化
if(0==this.fields.length && this.columns){
if(0==this.columns.length)console.log("请为"+this.getName()+"定义columns属性");
Ext.each(this.columns,function(c){
me.fields.push(c.dataIndex);
});
}
this.gridStore = new Ext.data.JsonStore({
url:this.url,
/*proxy : new Ext.data.HttpProxy({
url : this.url,
method : 'post'
}),
reader: new Ext.data.JsonReader({
totalProperty:'totalProperty',
root:'root'},
[
{name: 'functionId'},
{name: 'functionName'},
{name: 'type'}
]) */
root:this.JSONSTORE_ROOT,
totalProperty:this.JSONSTORE_TOTALPROPERTY,
fields:this.fields
});
this.listWidth = 350;
this.maxHeight = 300;
this.gridColumns.push( new Ext.grid.RowNumberer());
Ext.each(this.columns,function(c){
me.gridColumns.push(c);
});
this.grid = new Ext.grid.GridPanel(Ext.apply({
title: ''
,border: false
,height : 200
,paging: this.paging
,searchField:'local'
,store: this.gridStore
,colModel:new Ext.grid.ColumnModel(this.gridColumns)
,bbar:new Ext.PagingToolbar({
pageSize:2,
store:me.gridStore,
displayInfo:true,
displayMsg:'显示第{1}条记录,一共有{2}条',
emptyMsg:'没有记录'
})
},this.gridCfg));
this.grid.on('rowclick', function(grid, rowIndex, e) {
var r = me.gridStore.getAt(rowIndex);
if(me.fireEvent('beforeselect', me, r, rowIndex) !== false){
me.setValue(r.data[me.valueField || me.displayField]);
me.collapse();
me.fireEvent('select', me, r, rowIndex);
}
});
this.onViewClick = function(doFocus){};
}
,getStore : function(){
return this.gridStore;
}
,getGrid : function(){
return this.grid;
}
,setValue : function(v){
var text = v;
if(this.valueField){
var r = this.findRecord(this.valueField, v);
if(r){
text = r.data[this.displayField];
}else if(Ext.isDefined(this.valueNotFoundText)){
text = this.valueNotFoundText;
}
}
this.lastSelectionText = text;
if(this.hiddenField){
this.hiddenField.value = Ext.value(v, '');
}
Ext.form.ComboBox.superclass.setValue.call(this, text);
this.value = v;
return this;
}
,findRecord : function(prop, value){
var record;
if(this.gridStore.getCount() > 0){
this.gridStore.each(function(r){
if(r.data[prop] == value){
record = r;
return false;
}
});
}
return record;
}
});
Ext.reg('steelcombogird', Ext.SteelComboGrid);
相关推荐
7. **使用和配置**:在实际项目中,我们需要知道如何引入和配置ComboboxGrid,包括设置数据源、定义列模型、指定搜索条件等。这通常涉及到创建Store、定义ColumnModel、配置ComboBox和Grid的相关属性。 8. **性能...
标题“显示多列的ComboBox”涉及到一个常见的需求,即如何在一个下拉列表中展示多列数据,以便用户能更直观、全面地了解选项。这种扩展的ComboBox通常用于显示复杂的数据结构,例如数据库中的表格记录。 在传统的...
ComboBox的默认行为是弹出一个包含选项的列表,而你想要实现的是当用户点击下拉按钮时,展示一个Grid,这样可以展示更多的信息并且支持更复杂的交互。这种自定义的行为需要对EXTJS4的事件处理和组件嵌套有深入的理解...
- 当 `ComboBox` 的下拉列表需要展示复杂数据结构时,如多列或带有自定义样式的数据,可以使用 `GridComboBox`。 - `GridComboBox` 可以设置为单选或多选模式,根据业务需求选择合适的交互方式。 4. **配置与实现...
对于"MultiColumnComboSuggestionBox"这个名字,这可能指的是一个具有多列提示功能的ComboBox。在传统的ComboBox中,通常只能显示一行文本。而多列展示则可以提供更多信息,比如在下拉列表中展示更复杂的结构,比如...
这个控件通常用于显示多列数据,并且可以从关联的数据源中选择值。在本场景中,我们需要讨论的是如何获取`cxLookupComboBox`下拉列表中各列的值。 `cxLookupComboBox`提供了丰富的特性,可以方便地展示和处理多列...
最后,如果要在多个单元格中动态添加ComboBox,可以遍历StringGrid的行和列,对每一种需要添加ComboBox的情况重复上述过程。务必注意,因为ComboBox是动态创建的,所以需要正确管理它们的生命周期,确保在不再需要时...
同时,设置其Parent属性为StringGrid,这样Combobox就会出现在Grid的相应位置。 4. **处理交互**:在Combobox的OnDropDown事件中,可以设置其可见性,使其只在需要时显示下拉列表。而在OnCloseUp事件中,更新...
通过绑定Fields到Grid的Columns,我们可以确保显示的数据与数据库中的字段对应。同时,我们还可以通过事件处理程序,如OnBeforePopup和OnCloseUp,来控制下拉DBGrid的显示和隐藏,以及处理用户的选择和编辑操作。 ...
2. **配置`ColumnModel`**:在`ColumnModel`中,为需要回显`ComboBox`值的列添加`renderer`函数。该函数应该能够基于`ComboBox`的当前选择状态,动态获取并返回正确的显示值。 3. **实现`renderer`函数**:`...
有时候我们需要在Grid的某列中嵌入ComboBox组件,以提供动态选择数据的功能。本文将详细阐述在Ext JS版本3.0中,如何将动态ComboBox嵌入Grid并实现相关功能。 首先,要实现Grid中的ComboBox嵌入功能,需要了解几个...
1. **多列显示**:ComboxGrid控件能展示多列数据,这在普通的Combobox控件中是无法实现的。用户可以选择以列表形式查看多个属性,例如:客户ID、客户姓名、联系人等。 2. **数据绑定**:与标准的Delphi控件一样,...
在某些场景下,我们可能需要在某一列中使用下拉框(ComboBox)来提供用户选择,而每个下拉框的选项又需要根据所在行的数据进行个性化设置。这涉及到`DataGridView`与`DataTable`的结合使用以及自定义数据绑定。 `...
当我们需要在DataGrid的不同列中实现ComboBox的联动效果时,即在一个ComboBox的选择改变时,根据选中的值更新另一个ComboBox的选项,这涉及到事件监听、数据绑定和自定义组件等多个知识点。 首先,我们来理解联动的...
在本文中,我们将深入探讨如何实现一个具有多列样式的ComboBox控件,正如标题"myComboBox"所指示的那样。ComboBox是Windows Presentation Foundation (WPF) 和其他UI框架中常见的一种用户界面元素,通常用于展示下拉...
easyui combogrid实现本地模糊搜索过滤多列 easyui combogrid是一种强大的数据选择插件,可以提供给用户多种选择的数据项。但是,当数据项内容很多时,仅仅提供选择项是不够的,需要能够对用户的输入进行过滤,以便...
// 绑定数据到ComboBox comboCatalog.Properties.Items.AddRange(catalogList.ToArray()); } ``` ### 核心知识点三:使用绑定的数据 当用户选择了某个项后,可以通过`SelectedItem`属性获取所选的`CatalogInfo`...
接下来,`Grid`控件(通常是CGridCtrl或CListCtrl)则提供了一个二维表格布局,用于显示和编辑多列数据。它可以用于显示数据库记录、配置选项或其他结构化的数据集。`Grid`控件提供了类似电子表格的功能,包括行和列...
标题"stringGrid_delphi_stringgriddelphi_delphi下拉grid_"所提到的就是这种需求,即在Delphi的StringGrid控件的某个单元格中嵌入Combobox,以便用户可以方便地进行选择操作。 要实现这个功能,首先需要了解...
在本实例中,我们将重点讨论如何在datagrid的编辑模式下,将某列设置为combobox(下拉选择框),并指定其数据源,以及解决在保存时显示text值而非value值的问题。 首先,我们需要定义一个数据源数组`Address`,它...