easyui-datagrid开发实践(总结)

前端之家收集整理的这篇文章主要介绍了easyui-datagrid开发实践(总结)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一,引言

工作的需要,做了3年的wpf(mvvm)……,又因为项目的需求,回归到web的开发。

  • 3 years ago,vue是我三年前没用过的玩意儿。
  • 3 years ago,bootstrap组件没现在成熟。
  • 3 years ago,font awesome的普及度没有现在高。
  • 3 years ago,ui组件的选择也没有现在多。

二,项目的前端(easyui模板订制)

整个项目采用了oracle + dapper + castle + mvc + easyui的技术结合,本篇博客重点介绍easyui。

easyui的默认风格看久了很容易产生视觉疲劳,在这个项目中,我个性化订制风格。

订制easyui模板的工作量是挺大的,我用了一个偷懒的方法,花了几百块钱在网上买了几个easyui的皮肤,然后对这些皮肤,进行优化和重构。

money比较紧的同学,可以去下载easyui的免费皮肤。

@H_301_33@

三,easyui-datagrid的基本使用:

1,加载数据

a,通过post,url的方法向后端请求数据,如图所示:

名称',width: 100,sortable: false },{ field: 'Abbreviation',title: '简称',{ field: 'Business_Address',title: '经营地址',{ field: 'Registered_Address',title: '注册地址',{ field: 'Tel',title: '电话',{ field: 'Fax',title: '传真',{ field: 'Contactor',title: '联系人',{ field: 'Payment',title: '结算方式',{ field: 'Beneficiary_Name',title: '开户名称',{ field: 'Beneficiary_Address',title: '开户地址',{ field: 'Advising_Bank',title: '通知行',{ field: 'Bank_Address',title: '银行地址',{ field: 'Swift_Code',title: '银行代码',{ field: 'Beneficiary_Account',title: '银行账户',{ field: 'Company_Chop',title: '电子章',{ field: 'Send_Url',title: '发件邮箱链接',{ field: 'Send_Email',title: '发件人邮箱',{ field: 'Remark',title: '备注',{ field: 'Created_By',title: '创建人',{ field: 'Creation_Date',title: '创建日期',{ field: 'Modify_By',title: '修改人',{ field: 'Modify_Date',title: '修改日期',]],}); });

b,先定义好了datagrid的属性以及列,再通过loadData的方法设置datagrid的数据

名称',{ field: 'Item_Number',title: '物料编码',});

2,合并单元格

有时候用户需要如下图的效果

可以在datagrid的onLoadSuccess事件里增加如下代码

3,行,列变色

针对这样的行,列变色效果

a,行变色

中文描述',{ field: 'En_Description',title: '英文描述',{ field: 'Unit',title: '单位',{ field: 'Quantity',title: '工单数量',{ field: 'Total_Actual_Send_Quantity',title: '已出货数量',rowStyler: function (index,row) { if (row.Quantity == 0) { return 'background-color:pink;color:blue;font-weight:bold;'; } },});

b,列变色

Box: true },{ field: 'Material_No',width: 80,{ field: 'Remain_Quantity',title: '剩余数量',{ field: 'Actual_Send_Quantity',title: '本次出货',sortable: false,editor: { type: 'numberBox',options: { required: true,min: 0 },},styler: function (value,row,index) { return 'background-color:#ecffff;'; },{ field: 'Remark',editor: { type: 'textBox',options: { validType: 'length[1,20]' },

4,为datagrid添加工具条

如下效果的工具条,是通过datagrid的 toolbar 属性来指定,要留意的是toolbar的控件名称需要加上#符号。

HTML代码

查询条件 @Html.ToolButton(string.Format(@"{0}",@CommonResource.Add),ActionCode.Create) @Html.ToolButton(string.Format(@"{0}",@CommonResource.Edit),ActionCode.Edit) @Html.ToolButton(string.Format(@"{0}",@CommonResource.Delete),ActionCode.Delete)

js代码

5,做增,删,改操作

a,为datagrid增加一行

b,为datagrid编辑一行

c,为datagrid删除一行

d,treegrid的操作方法略有区别,附上源码:

function editCallBack(data) {
var row = $('#List').treegrid('getSelected');
$('#List').treegrid('update',{
id: row.Id,row: {
Name: data.Name,En_Name: data.En_Name,}
});
layer.msg('@CommonResource.ModifySuccess',time: 1000 });
}

$("#btnDelete").click(function () {
var row = $('#List').treegrid('getSelected');
if (row != null) {
layer.confirm('@CommonResource.ConfirmDelete',{
btn: ['@CommonResource.Sure','@CommonResource.Cancel'],shadeClose: true,function () {
if (row.ChildCount == 0 || typeof (row.ChildCount) == 'undefined') {
$.post("@Url.Action("Delete")/" + row.Id,function (data) {
if (data == "1") {

          $("#List").treegrid('remove',row.Id);
          layer.msg('@CommonResource.DeleteSuccess',time: 1000 });
        }
        else {
          layer.msg('@CommonResource.Delete<a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>',time: 1000 });
        }

      },"json");
    }
    else {
      layer.msg('@CommonResource.Noselectedrecord',time: 1000 });
    }

  },function () {
  });
}
else {
  layer.msg('@CommonResource.Noselectedrecord',time: 1000 });
}

});

6,编辑单元格

具体代码实现

$.extend($.fn.datagrid.methods,{ editCell: function (jq,param) { return jq.each(function () { var opts = $(this).datagrid('options'); var fields = $(this).datagrid('getColumnFields',true).concat($(this).datagrid('getColumnFields')); for (var i = 0; i < fields.length; i++) { var col = $(this).datagrid('getColumnOption',fields[i]); col.editor1 = col.editor; if (fields[i] != param.field) { col.editor = null; } } $(this).datagrid('beginEdit',param.index); for (var i = 0; i < fields.length; i++) { var col = $(this).datagrid('getColumnOption',fields[i]); col.editor = col.editor1; } }); } }); var editIndex = -1; function endEditCal() { if (editIndex == -1) { return true; } if ($('#Detail').datagrid('validateRow',editIndex)) { $('#Detail').datagrid('endEdit',editIndex); editIndex = -1; return true; } else { return false; } } $('#Detail').datagrid({ loadMsg: '@CommonResource.Processing',data: JSON.parse($("#MaterialDetailListStr").val()),columns: [[ { field: 'Material_Use',title: '用途',formatter: function (value) { for (var i = 0; i < manufactureList.length; i++) { if (manufactureList[i].Key == value) return manufactureList[i].Value; } return value; },editor: { type: 'combo<a href="/tag/Box/" target="_blank" class="keywords">Box</a>',options: { valueField: 'Key',textField: 'Value',data: manufactureList,<a href="/tag/required/" target="_blank" class="keywords">required</a>: true,panelHeight: "auto",editable:false,} },{ field: 'Tax_Type',title: '税别',formatter: function (value) { for (var i = 0; i < taxTypeList.length; i++) { if (taxTypeList[i].Key == value) return taxTypeList[i].Value; } return value; },data: taxTypeList,editable: false,{ field: 'Tax_Bcd',title: 'BCD',suffix: '%',precision: 2,min: 0,max: 100,} } },{ field: 'Tax_Cess',title: 'CESS',{ field: 'Tax_Igst',title: 'IGST',@if (Request.Params["Operate"] != "View") { <text> onClickCell: function (index,field,value) { if (endEditCal()) { $(this).datagrid('selectRow',index).datagrid('editCell',{ index: index,field: field }); //编辑一个单元格 //$(this).datagrid('beginEdit',index); //编辑一行 editIndex = index; } else { layer.msg('当前行的数据编辑有误',time: 1000 }); } },onAfterEdit: function (index,changes) { var rowData = $(this).datagrid('getData').rows[index]; $('#Detail').datagrid('updateRow',{ index: index,row: {},}); },onLoadSuccess: function (data) { for (var index = 0; index < data.rows.length; index++) { $(this).datagrid('beginEdit',index); } },</text> } }); $("#btnLineCreate").click(function () { if (endEditCal()) { editIndex = 0; $('#Detail').datagrid('insertRow',{ index: editIndex,}); $('#Detail').datagrid('selectRow',editIndex); $('#Detail').datagrid('beginEdit',editIndex); } else { layer.msg('当前行的数据编辑有误',time: 1000 }); } }); $("#btnLineDelete").click(function () { var row = $('#Detail').treegrid('getSelected'); if (row != null) { var rowIndex = $('#Detail').datagrid('getRowIndex',row); $('#Detail').datagrid('deleteRow',rowIndex); layer.msg('@CommonResource.DeleteSuccess',time: 1000 }); } else { layer.msg('@CommonResource.Noselectedrecord',time: 1000 }); } }); $("#btnSave").click(function () { var summaryValidate = true; var rows = $("#Detail").datagrid("getRows"); $(rows).each(function (index,itemData) { if ($('#Detail').datagrid('validateRow',index)) { $('#Detail').datagrid('endEdit',index); } else { summaryValidate = false; return false; } }); if (summaryValidate) { if (rows.length == 2) { $("#MaterialDetailListStr").val(JSON.stringify(rows)); } else { layer.msg('税别,用途应该设置为2行数据',time: 1000 }); return false; } } else { layer.msg('当前表单数据编辑有误',time: 1000 }); return false; } var check = $('form').form('validate'); if (check) { $.ajax({ url: "@Url.Action("CreateMaterial")",type: "Post",data: $("form").serialize(),dataType: "json",success: function (data) { if (data.Key == "1") { parent.$("#List").datagrid('reload'); var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); parent.layer.msg('@CommonResource.AddSuccess',time: 1000 }); } else { layer.msg("物料编号'" + data.Value.Item_Number + "'在<a href="/tag/shujuku/" target="_blank" class="keywords">数据库</a>中已<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a>",error: function (jqXHR,textStatus,errorThrown) { layer.msg('@CommonResource.Add<a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>',time: 1000 }); } }); } });

7,重置datagrid布局 $('#List').datagrid("resize");

四,总结

这些技巧,在帮助文档里也说的很详细,我只是把这些技术用于实践。希望对大家的学习有所帮助,也希望大家多多支持编程之家。

猜你在找的JavaScript相关文章