`

comboboxGrid多列

    博客分类:
  • ext
阅读更多
未完善版,后期将贴出完善版,完善版主要是封装了grid
comboboxGrid.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>测试多列</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
 
    <link rel="stylesheet" href="ext-3.4.0/resources/css/ext-all.css" type="text/css"></link>
<script type="text/javascript" src="ext-3.4.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext-3.4.0/ext-all.js"></script>
<script type="text/javascript" src="steelcombogird.js"></script>
  
    <script  >
Ext.onReady(function(){
var cbArr = [['4',"张麻子",'man'], ['6',"汤师爷",'man'], ['8',"黄四郎",'man'],['12',"夫人",'woman'], ['33',"小六子",'man']] ;
var cbJson = [{id:'4',name:'张麻子',sex:'man'},{id:'6',name:'汤师爷',sex:'man'},{id:'12',name:'夫人',sex:'woman'}];   
var win=new Ext.Window({
title:"hello",
width:600,
height:400,
items: [{
title: '参保凭证',
       height:450,
      xtype:'form',
      items: [{
                   xtype: "textfield",
                   itemId: "letterNumber",
                   name: "letterNumber",
                   fieldLabel: '编号1<font color="#FF0000" >*</font>',
                   anchor: "50%",
                   maxLength : 50,
                   maxLengthText : '最大长度为50',
                   allowBlank: false
               }, {
xtype:'steelcombogird'
,type:'combogrid'
,fieldLabel:'下拉列表'
,name:'steelcombo1111'
,editable : true
,displayField : 'functionName'
,valueField : 'functionId'
//这个不是必须的-当要用到影藏列时,可以单独定义
//,fields:[
//'functionId', 'functionName', 'parent', 'type', 'sort', 'status'
//]
,columns:[
{dataIndex:'functionId',header:'ID',sortable:true }
,{dataIndex:'functionName', header:'功能名称',sortable:true }  
,{dataIndex:'type',header:'类型',sortable:true}
]
,paging:true
,url:'comboboxGridData.jsp'
}
],
}]
});
win.show();
 
});
 
</script>
  
  
  </head>
  
  <body>
  </body>
</html>

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);

  • 大小: 42.8 KB
分享到:
评论

相关推荐

    Ext ComboboxGrid

    7. **使用和配置**:在实际项目中,我们需要知道如何引入和配置ComboboxGrid,包括设置数据源、定义列模型、指定搜索条件等。这通常涉及到创建Store、定义ColumnModel、配置ComboBox和Grid的相关属性。 8. **性能...

    显示多列的combobox

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

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

    ComboBox的默认行为是弹出一个包含选项的列表,而你想要实现的是当用户点击下拉按钮时,展示一个Grid,这样可以展示更多的信息并且支持更复杂的交互。这种自定义的行为需要对EXTJS4的事件处理和组件嵌套有深入的理解...

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

    - 当 `ComboBox` 的下拉列表需要展示复杂数据结构时,如多列或带有自定义样式的数据,可以使用 `GridComboBox`。 - `GridComboBox` 可以设置为单选或多选模式,根据业务需求选择合适的交互方式。 4. **配置与实现...

    combobox重绘

    对于"MultiColumnComboSuggestionBox"这个名字,这可能指的是一个具有多列提示功能的ComboBox。在传统的ComboBox中,通常只能显示一行文本。而多列展示则可以提供更多信息,比如在下拉列表中展示更复杂的结构,比如...

    取cxLookupComboBox下拉各列的值

    这个控件通常用于显示多列数据,并且可以从关联的数据源中选择值。在本场景中,我们需要讨论的是如何获取`cxLookupComboBox`下拉列表中各列的值。 `cxLookupComboBox`提供了丰富的特性,可以方便地展示和处理多列...

    Delphi7StringGrid内动态添加ComBoBox的值

    最后,如果要在多个单元格中动态添加ComboBox,可以遍历StringGrid的行和列,对每一种需要添加ComboBox的情况重复上述过程。务必注意,因为ComboBox是动态创建的,所以需要正确管理它们的生命周期,确保在不再需要时...

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

    同时,设置其Parent属性为StringGrid,这样Combobox就会出现在Grid的相应位置。 4. **处理交互**:在Combobox的OnDropDown事件中,可以设置其可见性,使其只在需要时显示下拉列表。而在OnCloseUp事件中,更新...

    delphi写ComboBox下拉DBGrid第三方控件的例子

    通过绑定Fields到Grid的Columns,我们可以确保显示的数据与数据库中的字段对应。同时,我们还可以通过事件处理程序,如OnBeforePopup和OnCloseUp,来控制下拉DBGrid的显示和隐藏,以及处理用户的选择和编辑操作。 ...

    extjs editgrid combobox 回显

    2. **配置`ColumnModel`**:在`ColumnModel`中,为需要回显`ComboBox`值的列添加`renderer`函数。该函数应该能够基于`ComboBox`的当前选择状态,动态获取并返回正确的显示值。 3. **实现`renderer`函数**:`...

    extjs中grid中嵌入动态combobox的应用

    有时候我们需要在Grid的某列中嵌入ComboBox组件,以提供动态选择数据的功能。本文将详细阐述在Ext JS版本3.0中,如何将动态ComboBox嵌入Grid并实现相关功能。 首先,要实现Grid中的ComboBox嵌入功能,需要了解几个...

    delphi控件ComboxGrid

    1. **多列显示**:ComboxGrid控件能展示多列数据,这在普通的Combobox控件中是无法实现的。用户可以选择以列表形式查看多个属性,例如:客户ID、客户姓名、联系人等。 2. **数据绑定**:与标准的Delphi控件一样,...

    DataGirdView同一列下拉框每一行显示不同的内容

    在某些场景下,我们可能需要在某一列中使用下拉框(ComboBox)来提供用户选择,而每个下拉框的选项又需要根据所在行的数据进行个性化设置。这涉及到`DataGridView`与`DataTable`的结合使用以及自定义数据绑定。 `...

    flex datagrid 中实现combobox联动

    当我们需要在DataGrid的不同列中实现ComboBox的联动效果时,即在一个ComboBox的选择改变时,根据选中的值更新另一个ComboBox的选项,这涉及到事件监听、数据绑定和自定义组件等多个知识点。 首先,我们来理解联动的...

    myComboBox

    在本文中,我们将深入探讨如何实现一个具有多列样式的ComboBox控件,正如标题"myComboBox"所指示的那样。ComboBox是Windows Presentation Foundation (WPF) 和其他UI框架中常见的一种用户界面元素,通常用于展示下拉...

    easyui combogrid实现本地模糊搜索过滤多列

    easyui combogrid实现本地模糊搜索过滤多列 easyui combogrid是一种强大的数据选择插件,可以提供给用户多种选择的数据项。但是,当数据项内容很多时,仅仅提供选择项是不够的,需要能够对用户的输入进行过滤,以便...

    DEV控件中的ComboBoxEdit控件如何绑定数据库中的数据

    // 绑定数据到ComboBox comboCatalog.Properties.Items.AddRange(catalogList.ToArray()); } ``` ### 核心知识点三:使用绑定的数据 当用户选择了某个项后,可以通过`SelectedItem`属性获取所选的`CatalogInfo`...

    ree控件和Grid数据控件相结合的VC源代码

    接下来,`Grid`控件(通常是CGridCtrl或CListCtrl)则提供了一个二维表格布局,用于显示和编辑多列数据。它可以用于显示数据库记录、配置选项或其他结构化的数据集。`Grid`控件提供了类似电子表格的功能,包括行和列...

    stringGrid_delphi_stringgriddelphi_delphi下拉grid_

    标题"stringGrid_delphi_stringgriddelphi_delphi下拉grid_"所提到的就是这种需求,即在Delphi的StringGrid控件的某个单元格中嵌入Combobox,以便用户可以方便地进行选择操作。 要实现这个功能,首先需要了解...

    jQuery Easyui datagrid editor为combobox时指定数据源实例

    在本实例中,我们将重点讨论如何在datagrid的编辑模式下,将某列设置为combobox(下拉选择框),并指定其数据源,以及解决在保存时显示text值而非value值的问题。 首先,我们需要定义一个数据源数组`Address`,它...

Global site tag (gtag.js) - Google Analytics