`

Ext2.2的grid简单功能(增、删、改、查、导出excel)

阅读更多

扩展grid代码

/**
* @auther huangfeng
* @class   Ext.ux.GridExtend
* 通用的grid
*/
Ext.ux.GridExtend=function(config){
  Ext.QuickTips.init();
  this.config=config;

  this.filters=this.config.filters||'';
     
     
/**
*  @param  {String}
*   显示列表的id
*/
  this.el=this.config.el||document.body;
/**
* @param   {String}
* 读取编辑数据的form的url
*/
  this.editUrl=this.config.editUrl;
/**
* @param   {String}
* 读取编辑数据的form的url
*/
  this.deleteUrl=this.config.deleteUrl;
/**
* @param   {String}
* 读取列表数据的url
*/
  this.storeUrl=this.config.storeUrl;
/**
* @param   {String}
* 保存添加到列表数据的url
*/
  this.formSaveUrl=this.config.formSaveUrl;
/**
* @param   {String}
* 列表的标题
*/
  this.title=this.config.title||'';
/**
* @param   {Array}
* 列表顶部状态栏
*/
  this.tbar=this.config.tbar||[{//grid顶部栏位
    text:'添加',//按钮的名称
    tooltip:'添加数据',//鼠标停留在按钮上的提示
    iconCls:'add',//按钮图表的类
    handler:this.newInfo.createDelegate(this)//处理按钮被点击时触发的时间函数
   },'-',{//'-'为多按钮间隔符
    text:'删除',//删除按钮的名称
    tooltip:'删除数据',//鼠标停留在按钮上的提示
    iconCls:'remove',//按钮图表的类
    handler:this.handlerDelete.createDelegate(this)
    //处理按钮被点击时触发的时间函数
   },'-',{
    text:'导出Excel',//导出Excel按钮的名称
    tooltip:'导出Excel',//鼠标停留在按钮上的提示
    iconCls:'exportExcel',
    handler:this.exportExcel.createDelegate(this)//处理按钮被点击时触发的时间函数
   }];

/**
* @param 选择框对象(模型)
*/
  this.sm=this.config.sm||new Ext.grid.CheckboxSelectionModel({
      //start Ext.grid.CheckboxSelectionModel
      singleSelect:false//是否只能选择一个
    });
/**
* @param   {Array}
* 列表的栏的前面数据
*/
  this.cmDataArrayBefore=[
      //start Ext.grid.ColumnModel
      //defaultSortable:true,//默认情况下为排序
      new Ext.grid.RowNumberer(),//数据函数序列号
      this.sm
    ];
/**
* @param   {Array}
* 显示的内容是从后台读取出来的数据,所以此数据中的dataIndex属性要与
* 从后台读取的字段要一致
*/
  this.cmDataArray=this.config.cmDataArray||[];
/**
* @param   {Array}
* 列表的栏的后面数据
*/
  this.cmDataArrayAfter=this.config.cmDataArrayAfter||[];
/**
* @param   {Ext.grid.ColumnModel}
* 列表的栏位数据
*/
 this.cm=this.config.cm||new Ext.grid.ColumnModel(
  this.cmDataArrayBefore.concat(this.cmDataArray).concat(this.cmDataArrayAfter)
 );//end Ext.grid.ColumnModel    
     
/**
* @param   {Array}
* 读取gridStore数据的字段设置数据对象
*/
 this.gridStoreFields=this.config.gridStoreFields||new Array();
    
/*
* 如果this.gridStoreFields中没有数据,把this.cmDataArray中的dataIndex的属性值
* 赋予gridStoreFields数组中对象的name属性值
*/
  if(this.gridStoreFields.length==0){
    for(var i=0,len=this.cmDataArray.length;i<len;i++){
      this.gridStoreFields[i]={name:this.cmDataArray[i].dataIndex};
     }
  }
    
/**
* @param   {new Ext.data.Store}
* 从后台读取的列表内容
*/ 
 this.gridStore=this.config.gridStore||new Ext.data.Store({
   //start Ext.data.Store
   proxy:new Ext.data.HttpProxy({
         url:this.storeUrl//读取数据的url
   }),
   reader:new Ext.data.JsonReader({//start Ext.data.JsonReader
       root:'rows', //存储数据的属性
       totalProperty:'results',//总共的页数
       id:'uniqueCode'//每行的id值
     },//end Ext.data.JsonReader
   this.gridStoreFields)
 });//end Ext.data.Store
     
 this.gridStore.load({params:{start: 0, limit: 10}});
/**
* @param   {Ext.PagingToolbar}
* 底部状态栏
*/
 this.bbar=this.config.bbar||new Ext.PagingToolbar({//在grid底层添加分页工具栏
      pageSize:10,//显示的数据条数
      store:this.gridStore,//选择翻页按钮时的加载到grid的数据
      displayInfo:true,//设置是否显示分页栏的信息
      displayMsg:'显示第 {0} 条到 {1} 条记录,一共 {2} 条',
      //消息栏的页数信息
      emptyMsg:"没有记录"//当没有记录时要显示的信息
  });//end bbar
/**
* 如果要设置此参数必须在cm中设置相应的id
*/
 this.autoExpandColumn=this.config.autoExpandColumn||'';
         
/**
 @param   {Object}
* 默认情况下有此显现,如果不需要可以为false
* 必须含有下列参数:
* loadingEL {String} 加载页面时显示的内容id
* loadingMaskEl {String} 渐显的内容id 
*/ 
 this.loadingMark=this.config.loadingMark||{
      loadingEL:'loading',
      loadingMaskEL:'loading-mask'
    };
/**
* @param   {Ext.grid.GridPanel}
* @private
*/
 this.grid=this.config.gridStore||new Ext.grid.GridPanel({
    //el:this.el, //显示grid对象的层ID.
    store:this.gridStore,// grid装载的数据.
    viewConfig:{
        autoFill:true,
        deferEmptyText:'请等待...',
        emptyText:'没有数据',
        enableRowBody:true
    }, 
    sm:this.sm,//在每行数据前添加的一组checkBox
    height:Ext.get(this.el).getComputedHeight(),
    //autoHeight:true,
    loadMask:true, 
    maskDisabled:true,
    cm:this.cm, //设置栏位.
    title:this.title,//标题名称.
    iconCls:'icon-grid',//标题前的图片css类
    autoExpandColumn:this.autoExpandColumn,
    plugins: this.filters,
    bbar:this.bbar,
    tbar:this.tbar
 });
     
  this.formFields=this.config.formFields||new Array();
     
/**
* 双击数据的事件,弹出一个编辑此条数据的层 
* @param grid  此列表的对象
* @param rowIndex 在列表中的行数
* @param e    触发此事件的事件对象
*/
 this.rowdblclick=this.config.rowdblclick||function(grid, rowIndex, e){
    var selectId=this.gridStore.data.items[rowIndex].id;
    this.editInfo(selectId);
 };
 this.grid.on('rowdblclick',this.rowdblclick.createDelegate(this));
 this.grid.render(this.el);
    
//当js加载完毕后删除loading页面并渐显内容
 if(this.loadingMark){
   setTimeout(function(){
      Ext.get(this.loadingMark.loadingEL).remove();
      Ext.get(this.loadingMark.loadingMaskEL).fadeOut({remove:true});
    }.createDelegate(this), 250);
  }   
 }

 Ext.ux.GridExtend.prototype={
/**
* 加载 form表单的数据
* @param selectId 选择此条数据的唯一标识码,此参数发送到后台处理
*/
  editInfo:function(selectId){
      var form=this.getForm();
    
      form.form.load({//start load 参数设置
          url:this.editUrl,
          params:{
            uniqueCode:selectId
          },
          waitMsg:'Loading..'
      });//end load 参数设置
         
   this.formWindow(form,'编辑');
  },
  getForm:function(){
  //错误信息放在右边
   Ext.form.Field.prototype.msgTarget = 'side';
   //var formSaveUrl=this.formSaveUrl;
   //var formFields=this.formFields;
   var formSaveUrl=Ext.clone(this.formSaveUrl);
   var formFields=Ext.clone(this.formFields);
        
   //实例化form面板
   var form=new Ext.form.FormPanel({//start Ext.form.FormPanel
        baseCls:'x-plain',
        url:this.formSaveUrl,
        frame:true,
        id:'form',
        items:formFields
    });//end Ext.form.FormPanel
        
    return form;
   },
/**
* 装form表单的窗口
* @param form 要装载的form
  @param titlePre  标题的前缀
*/
 formWindow:function(form,titlePre){
 //实例化窗口
  this.window=new Ext.Window({//start Ext.Window
        title:titlePre+'任务列表',
        width:500,
        height:500,
        minWidth:300,
        minHeight:300,
        layout:'fit',
        //closeAction:'hide',
        plain:true,
        bodyStyle:'padding:5px',
        iconCls:'form',
        buttonAlign:'center',
        items:form,
        modal:true,
          
        buttons:[{//按钮
            text:'保存',
            handler:(function(){//start function按钮处理函数
              if(form.getForm().isValid()){
               //表单是否通过交验,通过责提交表单,否则弹出错误窗口
                form.getForm().submit({
                 scope:this,
                 waitMsg:'保存数据...',
                 success:function(form,action){
                  Ext.MessageBox.alert('消息:','保存成功');
                  this.grid.store.reload();
                  this.window.close() ;
                 },
                 failure:function(form,action){
            Ext.MessageBox.alert('有错误:', action.result.errors);
            this.window.close() ;
           }
   });
 }else{
    Ext.MessageBox.alert('有错误:','表单填写由错误!');
 }
                    
 }).createDelegate(this)//end function               
 },{
  text:'重置',
  handler:function(){//start function按钮处理函数
  form.getForm().reset();
}//end function 
}]
});//end Ext.Window


//显示窗口
 this.window.show();
},
/**
* 添加列表新数据的函数
*/
  newInfo:function(){//start newTableInfo
     this.formWindow(this.getForm(),'添加');       
  },//end newTableInfo
/**
* 删除数据,并把此数据的唯一标识码发送到后台
*/
  handlerDelete:function(){//start deleteRecord
        this.sendId(this.deleteUrl);
       
    },//end deleteRecord
 sendId:function(url){//start deleteRecord
    var ids=new Array(); //存放uniqueCode的数组
    var records=this.grid.selModel.selections.items;
    //grid中被选择的数据,类型为Array
   for(var i = 0, len = records.length; i < len; i++){
      ids[ids.length]=records[i].id;  //把数据id赋予ids数组中
   }
   Ext.Ajax.request({//调用Ajax发送请求到后台
       scope:this,
       url:url,//删除grid数据的url.
       success:function(transport){//处理成功后返回的函数
       var oXmlDom=transport.responseText;
       if(oXmlDom!=''){
              
           var content=eval(oXmlDom);
           Ext.MessageBox.alert("有错误:",content.errors)
        }else{
           this.grid.store.reload();//重新加载grid中的数据
        }
       },
       failure:function(){//处理后台删除失败的函数
          Ext.MessageBox.alert('消息','删除失败!');
       }
     });
         
  },//end deleteRecord
exportExcel:function(){
  document.location.href=url;
  //'http://localhost:8080/chalk/hf/sortManager.do?action=export';
 }
}

下面是使用前要再加的js,主要是处理一些ext2.0一些效果,不加也可以,不过可能会少些效果
//填充图片的本地应用
Ext.BLANK_IMAGE_URL='../resources/images/default/s.gif';
//在ie中默认的宽度不够
Ext.apply(Ext.MessageBox,{
 alert:function(title, msg, fn, scope){
    this.show({
        title : title,
        msg : msg,
        buttons: this.OK,
        minWidth:200,
        fn: fn,
        scope : scope
     });
     return this;
 }
});
Ext.menu.RangeMenu.prototype.icons = {
    gt: '../resources/extendIamges/greater_then.png', 
    lt: '../resources/extendIamges/less_then.png',
    eq: '../resources/extendIamges/equals.png'
};
Ext.grid.filter.StringFilter.prototype.icon =图片路径 
//'../resources/extendIamges/find.png';

/* 
* 修改filter发送到后台的数据模式.
* 例:filter.[i][field]、filter.[i][type]、filter.[i][value]、
   filter.[i][comparison]、
* 
*/

Ext.grid.GridFilters.prototype.buildQuery=function(filters){
  var p = {};
  for(var i=0, len=filters.length; i<len; i++) {
    var f = filters[i];
    var root = [this.paramPrefix, '[', i, ']'].join('');
    p[root + '[field]'] = f.field;
    //修改此处
    var dataPrefix = root;
    for(var key in f.data) {
     p[[dataPrefix, '[', key, ']'].join('')] = f.data[key];
   }
  }
       
  return p;
}

//添加时间交验函数
Ext.apply(Ext.form.VTypes, {    
     //时间交验属性
     daterange: function(val, field) {
      var date = field.parseDate(val);
     
      var dispUpd = function(picker) {
          var ad = picker.activeDate;
          picker.activeDate = null;
         picker.update(ad);
     };
//debugger;
      if (field.startDateField) {
          var sd = field.startDateField;
          sd.maxValue = date;
       if (sd.menu && sd.menu.picker) {
          sd.menu.picker.maxDate = date;
          dispUpd(sd.menu.picker);
        }
      } else if (field.endDateField) {
        var ed = field.endDateField;
        ed.minValue = date;
        if (ed.menu && ed.menu.picker) {
           ed.menu.picker.minDate = date;
           dispUpd(ed.menu.picker);
      }
   }
  
     return true;
  }
});
Ext.QuickTips.init();

此代码中可能会用到之前的radio和checkbox校代码

这里也随便贴出来

/**
* 此js为补充Extjs的chechbox和radio校验
* 
* checkbox需要添加属性:
* showInvalidText:Boolean 
* 此属性为标识出在那个checkbox后面添加错误图片
* 注意:boxLabel需要两个字符不然图片会合字重叠,可以在字符后加一空格' '
* 
* radio需要添加属性:
* showInvalidText:Boolean 
* 此属性为标识出在那个radio后面添加错误图片
*/

Ext.apply(Ext.form.Checkbox.prototype, {
 getErrorCt:function(){
  return this.el.findParent('.x-form-element', 5, true) || 
  // use form element wrap if available
 this.el.findParent('.x-form-field-wrap', 5, true);   
  // else direct field wrap
 }
});

Ext.apply(Ext.form.Radio.prototype, {
    getErrorCt:function(){
     return this.el.findParent('.x-form-element', 5, true) || 
     // use form element wrap if available
    this.el.findParent('.x-form-field-wrap', 5, true);  
     // else direct field wrap
 }
});

function markInvalid(msg){
 if (!this.rendered || this.preventMark) { // not rendered
    return;
 }
 this.el.addClass(this.invalidClass);
   msg = msg || this.invalidText;
  switch (this.msgTarget) {
      case 'qtip' :
      this.el.dom.qtip = msg;
      this.el.dom.qclass = 'x-form-invalid-tip';
      if (Ext.QuickTips) { 
      // fix for floating editors interacting with
      // DND
      Ext.QuickTips.enable();
  }
  break;
  case 'title' :
  this.el.dom.title = msg;
  break;
  case 'under' :
  if (!this.errorEl) {
   var elp = this.getErrorCt();
   this.errorEl = elp.createChild( {
        cls : 'x-form-invalid-msg'
    });
   this.errorEl.setWidth(elp.getWidth(true) - 20);
  }
  this.errorEl.update(msg);
    Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
    break;
    case 'side' :
    if (!this.showInvalidText) {
           break;
      }
   if (!this.errorIcon) {
        var elp = this.getErrorCt();
        this.errorIcon = elp.createChild( {
            cls : 'x-form-invalid-icon'
          });
     }
  this.errorIcon.alignTo(this.el.next(), 'tl-tr', [2, 0]);
      this.errorIcon.dom.qtip = msg;
      this.errorIcon.dom.qclass = 'x-form-invalid-tip';
      this.errorIcon.show();
      this.on('resize', this.alignErrorIcon, this);
      break;
  default :
      var t = Ext.getDom(this.msgTarget);
      t.innerHTML = msg;
      t.style.display = this.msgDisplay;
    break;
  }
  this.fireEvent('invalid', this, msg);
}
 
 function clearInvalid(){
   if (!this.rendered || this.preventMark) { // not rendered
       return;
   }
   this.el.removeClass(this.invalidClass);
  switch (this.msgTarget) {
      case 'qtip' :
      this.el.dom.qtip = '';
    break;
  case 'title' :
      this.el.dom.title = '';
    break;
  case 'under' :
      if (this.errorEl) {
        Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
      }
   break;
  case 'side' :
     if (this.errorIcon) {
         this.errorIcon.dom.qtip = '';
         this.errorIcon.hide();
         this.un('resize', this.alignErrorIcon, this);
    }
   break;
  default :
  var t = Ext.getDom(this.msgTarget);
  t.innerHTML = '';
  t.style.display = 'none';
  break;
  }
  this.fireEvent('valid', this);
 }
 
function validate(){
 var array = this.ownerCt.find('name', this.name);
 if (this.validateValue(this.processValue(this.getRawValue()))) {
    for(var i=0;i<array.length;i++){
       array[i].clearInvalid();
   }
    return true;
 }
  return false;
}

function validateValue() {
    if (!this.getGroupValue()) {
       this.markInvalid();
      return false;
     }
  return true;
}

Ext.form.Checkbox.prototype.markInvalid=Ext.form.Radio.prototype.markInvalid 
  = markInvalid;


Ext.form.Checkbox.prototype.clearInvalid=Ext.form.Radio.prototype.clearInvalid 
= clearInvalid;


Ext.form.Checkbox.prototype.validate=Ext.form.Radio.prototype.validate
 = validate;

Ext.form.Checkbox.prototype.validateValue=function(){
  var array = this.ownerCt.find('name', this.name);
    
   for(var i=0;i<array.length;i++){
     if(array[i].getValue()){
      return true;
     }
   }
   this.markInvalid();
   return false;
}
Ext.form.Radio.prototype.validateValue = validateValue;
 
分享到:
评论

相关推荐

    Ext Grid数据导出到Excel

    Ext.ptx.SlideMsg.msg("信息提示", "导出Excel成功!"); }, failure: function(response, request) { Ext.getBody().unmask(); Ext.MessageBox.alert("出现异常", response.responseText); } }); } ``` ### 3...

    Ext 中实现Excel导出

    根据给定的信息,本文将详细解释如何在Ext框架中实现Excel导出功能。这涉及到从前台界面设计到后端数据处理的多个环节。下面将依次介绍相关知识点。 ### 一、Ext简介 Ext是一个用于构建交互式Web应用程序的...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不...

    ExtAspNet_v2.3.2_dll

    -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不...

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略。 (1)第一层采用电压电流双闭环pi控制,电压电流正负序分离,电压外环通过产生基波正序有功电流三相所有H桥模块直流侧平均电压恒定,电流内环采用前馈解耦控制; (2)第二层相间电压均衡控制,注入零序电压,控制通过注入零序电压维持相间电压平衡; (3)第三层相内电压均衡控制,使其所有子模块吸收的有功功率与其损耗补,从而保证所有H桥子模块直流侧电压值等于给定值。 有参考资料。 639,核心关键词: 1. 不平衡电网下的SVG无功补偿 2. 级联H桥SVG无功补偿STATCOM 3. 三层控制策略 4. 电压电流双闭环PI控制 5. 电压电流正负序分离 6. 直流侧平均电压恒定 7. 前馈解耦控制 8. 相间电压均衡控制 9. 零序电压注入 10. 相内电压均衡控制 以上十个关键词用分号分隔的格式为:不

    GTX 1080 PCB图纸

    GTX 1080 PCB图纸,内含图纸查看软件

    深度优化与应用:提升DeepSeek润色指令的有效性和灵活性指南

    内容概要:本文档详细介绍了利用 DeepSeek 进行文本润色和问答交互时提高效果的方法和技巧,涵盖了从明确需求、提供适当上下文到尝试开放式问题以及多轮对话的十个要点。每一部分内容都提供了具体的示范案例,如指定回答格式、分步骤提问等具体实例,旨在指导用户更好地理解和运用 DeepSeek 提升工作效率和交流质量。同时文中还强调了根据不同应用场景调整提示词语气和风格的重要性和方法。 适用人群:适用于希望通过优化提问技巧以获得高质量反馈的企业员工、科研人员以及一般公众。 使用场景及目标:本文针对所有期望提高 DeepSeek 使用效率的人群,帮助他们在日常工作中快速获取精准的答案或信息,特别是在撰写报告、研究材料准备和技术咨询等方面。此外还鼓励用户通过不断尝试不同形式的问题表述来进行有效沟通。 其他说明:该文档不仅关注实际操作指引,同样重视用户思维模式转变——由简单索取答案向引导 AI 辅助创造性解决问题的方向发展。

    基于FPGA与W5500实现的TCP网络通信测试平台开发-Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivad

    基于FPGA与W5500实现的TCP网络通信测试平台开发——Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivado 2019软件的扩展开发,基于FPGA和W5500的TCP网络通信 测试平台 zynq扩展口开发 软件平台 vivado2019.2,纯Verilog可移植 测试环境 压力测试 cmd命令下ping电脑ip,同时采用上位机进行10ms发包回环测试,不丢包(内部数据回环,需要时间处理) 目前实现单socket功能,多路可支持 ,基于FPGA; W5500; TCP网络通信; Zynq扩展口开发; 纯Verilog可移植; 测试平台; 压力测试; 10ms发包回环测试; 单socket功能; 多路支持。,基于FPGA与W5500的Zynq扩展口TCP通信测试:可移植Verilog实现的高效网络通信

    Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警及记录、自动实验、数据处理与查询存储,报表生成与打印一体化解决方案 ,Labview液压比例阀

    Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警及记录、自动实验、数据处理与查询存储,报表生成与打印一体化解决方案。,Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警管理及实验自动化,labview液压比例阀伺服阀试验台程序:功能包括,同PLC通讯程序,液压动画,手动控制及调试,传感器标定,报警设置及报警记录,自动实验,数据处理曲线处理,数据库存储及查询,报表自动生成及打印,扫码枪扫码及信号录入等~ ,核心关键词:PLC通讯; 液压动画; 手动控制及调试; 传感器标定; 报警设置及记录; 自动实验; 数据处理及曲线处理; 数据库存储及查询; 报表生成及打印; 扫码枪扫码。,Labview驱动的智能液压阀测试系统:多功能控制与数据处理

    华为、腾讯、万科员工职业发展体系建设与实践.pptx

    华为、腾讯、万科员工职业发展体系建设与实践.pptx

    基于遗传算法的柔性车间调度优化 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    电网不对称故障下VSG峰值电流限制的柔性控制策略:实现电流平衡与功率容量的优化利用,电网不对称故障下VSG峰值电流限制的柔性控制策略:兼顾平衡电流与功率控制切换的动态管理,电网不对称故障下VSG峰值电

    电网不对称故障下VSG峰值电流限制的柔性控制策略:实现电流平衡与功率容量的优化利用,电网不对称故障下VSG峰值电流限制的柔性控制策略:兼顾平衡电流与功率控制切换的动态管理,电网不对称故障下VSG峰值电流限制的柔性不平衡控制(文章完全复现)。 提出一种在不平衡运行条件下具有峰值电流限制的可变不平衡电流控制方法,可灵活地满足不同操作需求,包括电流平衡、有功或无功恒定运行(即电流控制、有功控制或无功控制之间的相互切),注入电流保持在安全值内,以更好的利用VSG功率容量。 关键词:VSG、平衡电流控制、有功功率控制、无功功率控制。 ,VSG; 峰值电流限制; 柔性不平衡控制; 电流平衡控制; 有功功率控制; 无功功率控制。,VSG柔性控制:在电网不对称故障下的峰值电流限制与平衡管理

    libpinyin-tools-0.9.93-4.el7.x64-86.rpm.tar.gz

    1、文件内容:libpinyin-tools-0.9.93-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libpinyin-tools-0.9.93-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    机器学习(预测模型):动漫《龙珠》相关的数据集

    数据集是一个以经典动漫《龙珠》为主题的多维度数据集,广泛应用于数据分析、机器学习和图像识别等领域。该数据集由多个来源整合而成,涵盖了角色信息、战斗力、剧情片段、台词以及角色图像等多个方面。数据集的核心内容包括: 角色信息:包含《龙珠》系列中的主要角色及其属性,如名称、种族、所属系列(如《龙珠》《龙珠Z》《龙珠超》等)、战斗力等级等。 图像数据:提供角色的图像资源,可用于图像分类和角色识别任务。这些图像来自动画剧集、漫画和相关衍生作品。 剧情与台词:部分数据集还包含角色在不同故事中的台词和剧情片段,可用于文本分析和自然语言处理任务。 战斗数据:记录角色在不同剧情中的战斗力变化和战斗历史,为研究角色成长和剧情发展提供支持。 数据集特点 多样性:数据集整合了角色、图像、文本等多种类型的数据,适用于多种研究场景。 深度:不仅包含角色的基本信息,还涵盖了角色的成长历程、技能描述和与其他角色的互动关系。 实用性:支持多种编程语言(如Python、R)的数据处理和分析,提供了详细的文档和示例代码。

    基于protues仿真的多功公交站播报系统设计(仿真图、源代码)

    基于protues仿真的多功公交站播报系统设计(仿真图、源代码) 该设计为基于protues仿真的多功公交站播报系统,实现温度显示、时间显示、和系统公交站播报功能; 具体功能如下: 1、系统使用51单片机为核心设计; 2、时钟芯片进行时间和日期显示; 3、温度传感器进行温度读取; 4、LCD12864液晶屏进行相关显示; 5、按键设置调节时间; 6、按键设置报站; 7、仿真图、源代码; 操作说明: 1、下行控制报站:首先按下(下行设置按键),(下行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 2、上行控制报站:首先按上(上行设置按键),(上行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 3、按下关闭播报按键,则关闭播报功能和清除显示

    基于微信小程序的琴房管理系统的设计与实现.zip

    采用Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、琴房信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、琴房信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,琴房信息管理、琴房预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。

    界面GUI设计MATLAB教室人数统计.zip

    MATLAB可以用于开发人脸识别考勤系统。下面是一个简单的示例流程: 1. 数据采集:首先收集员工的人脸图像作为训练数据集。可以要求员工提供多张照片以获得更好的训练效果。 2. 图像预处理:使用MATLAB的图像处理工具对采集到的人脸图像进行预处理,例如灰度化、裁剪、缩放等操作。 3. 特征提取:利用MATLAB的人脸识别工具包,如Face Recognition Toolbox,对处理后的图像提取人脸特征,常用的方法包括主成分分析(PCA)和线性判别分析(LDA)等。 4. 训练模型:使用已提取的人脸特征数据集训练人脸识别模型,可以选择支持向量机(SVM)、卷积神经网络(CNN)等算法。 5. 考勤系统:在员工打卡时,将摄像头捕获的人脸图像输入到训练好的模型中进行识别,匹配员工信息并记录考勤数据。 6. 结果反馈:根据识别结果,可以自动生成考勤报表或者实时显示员工打卡情况。 以上只是一个简单的步骤,实际开发过程中需根据具体需求和系统规模进行定制和优化。MATLAB提供了丰富的图像处理和机器学习工具,是开发人脸识别考勤系统的一个很好选择。

    hjbvbnvhjhjg

    hjbvbnvhjhjg

    HCIP、软考相关学习PPT

    HCIP、软考相关学习PPT提供下载

    绿豆BOX UI8版:反编译版六个全新UI+最新后台直播管理源码

    绿豆BOX UI8版:反编译版六个全新UI+最新后台直播管理源码 最新绿豆BOX反编译版六个UI全新绿豆盒子UI8版本 最新后台支持直播管理 作为UI6的升级版,UI8不仅修复了前一版本中存在的一些BUG,还提供了6套不同的UI界面供用户选择,该版本有以下特色功能: 在线管理TVBOX解析 在线自定义TVBOX 首页布局批量添加会员信息 并支持导出批量生成卡密 并支持导出直播列表管理功能

Global site tag (gtag.js) - Google Analytics