comboboxGrid多列

未完善版,后期将贴出完善版,完善版主要是封装了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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Excel处理工具示例,使用openpyxl模块和tkinter模块编写: ```python import openpyxl from openpyxl.utils import get_column_letter from tkinter import * from tkinter import filedialog # 打开Excel文件 def open_file(): file_path = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")]) if file_path: global wb wb = openpyxl.load_workbook(file_path) sheet_names = wb.sheetnames sheet_selector['values'] = sheet_names sheet_selector.set(sheet_names[0]) # 选择工作表 def select_sheet(): global sheet sheet = wb[sheet_selector.get()] column_names = [cell.value for cell in sheet[1]] column_selector['values'] = column_names # 导入数据 def import_data(): column_index = get_column_letter(column_selector.current_column+1) for i, data in enumerate(data_entry.get().split('\n')): sheet[column_index+str(i+2)].value = data wb.save(file_path) # VLOOKUP函数 def vlookup(): lookup_value = lookup_entry.get() lookup_column_index = column_selector.current_column table_array = sheet.values for row in table_array: if row[lookup_column_index] == lookup_value: result_label.config(text=row[column_selector_2.current_column]) break else: result_label.config(text="N/A") # AVERAGEIFS函数 def averageifs(): criteria_range_index = column_selector.current_column criteria_range = sheet.values criteria_range_2_index = column_selector_2.current_column criteria_range_2 = sheet.values criteria = criteria_entry.get() criteria_2 = criteria_entry_2.get() count = 0 total = 0 for row in criteria_range: if row[criteria_range_index] == criteria: if row[criteria_range_2_index] == criteria_2: total += row[column_selector_3.current_column] count += 1 if count > 0: result_label.config(text=total/count) else: result_label.config(text="N/A") # COUNTIF函数 def countif(): criteria_range_index = column_selector.current_column criteria_range = sheet.values criteria = criteria_entry.get() count = 0 for row in criteria_range: if row[criteria_range_index] == criteria: count += 1 result_label.config(text=count) # 创建GUI root = Tk() root.title("Excel处理工具") # 打开文件按钮 open_button = Button(root, text="打开文件", command=open_file) open_button.pack() # 工作表选择器 sheet_selector = ttk.Combobox(root) sheet_selector.pack() sheet_selector.bind("<<ComboboxSelected>>", select_sheet) # 列选择器 column_selector = ttk.Combobox(root) column_selector.pack() # 数据导入 data_entry = Text(root, height=5) data_entry.pack() import_button = Button(root, text="导入数据", command=import_data) import_button.pack() # 函数选择器 function_selector = ttk.Notebook(root) function_selector.pack() # VLOOKUP函数 vlookup_frame = Frame(function_selector) vlookup_frame.pack() lookup_label = Label(vlookup_frame, text="查找值:") lookup_label.grid(row=0, column=0) lookup_entry = Entry(vlookup_frame) lookup_entry.grid(row=0, column=1) column_label = Label(vlookup_frame, text="查找列:") column_label.grid(row=1, column=0) column_selector_2 = ttk.Combobox(vlookup_frame) column_selector_2.grid(row=1, column=1) result_button = Button(vlookup_frame, text="计算结果", command=vlookup) result_button.grid(row=2, column=0) result_label = Label(vlookup_frame) result_label.grid(row=2, column=1) # AVERAGEIFS函数 averageifs_frame = Frame(function_selector) averageifs_frame.pack() criteria_label = Label(averageifs_frame, text="条件1:") criteria_label.grid(row=0, column=0) criteria_entry = Entry(averageifs_frame) criteria_entry.grid(row=0, column=1) column_label_2 = Label(averageifs_frame, text="条件1列:") column_label_2.grid(row=1, column=0) column_selector_3 = ttk.Combobox(averageifs_frame) column_selector_3.grid(row=1, column=1) criteria_label_2 = Label(averageifs_frame, text="条件2:") criteria_label_2.grid(row=2, column=0) criteria_entry_2 = Entry(averageifs_frame) criteria_entry_2.grid(row=2, column=1) column_label_3 = Label(averageifs_frame, text="条件2列:") column_label_3.grid(row=3, column=0) column_selector_2.grid(row=3, column=1) result_button_2 = Button(averageifs_frame, text="计算结果", command=averageifs) result_button_2.grid(row=4, column=0) result_label_2 = Label(averageifs_frame) result_label_2.grid(row=4, column=1) # COUNTIF函数 countif_frame = Frame(function_selector) countif_frame.pack() criteria_label_3 = Label(countif_frame, text="条件:") criteria_label_3.grid(row=0, column=0) criteria_entry_3 = Entry(countif_frame) criteria_entry_3.grid(row=0, column=1) result_button_3 = Button(countif_frame, text="计算结果", command=countif) result_button_3.grid(row=1, column=0) result_label_3 = Label(countif_frame) result_label_3.grid(row=1, column=1) # 启动GUI root.mainloop() ``` 该工具包含以下功能: 1. 打开Excel文件 2. 选择工作表 3. 导入数据到指定列 4. 计算VLOOKUP、AVERAGEIFS、COUNTIF函数的结果 在GUI中,可以通过选择工作表和列来设置要计算的数据。然后,选择相应的函数并输入所需参数,最后点击“计算结果”按钮即可计算出结果并在GUI中显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值