亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解EasyUi控件中的Datagrid

2019-11-19 15:41:58
字體:
來源:轉載
供稿:網友

     最近手頭有個web項目需要用到第三方控件(EasyUi),用第三方控件做出來的效果畢竟比原生態的要稍微好看那么一點,該項目中有個需求,需要在數據列表中直接編輯數據保存,行話叫做行內編輯。

   在講行內編輯之前,我們需要先了解如何使用EasyUi創建一個DataGrid,當然方式有很多(1.easyui.js,或者直接html代碼加easyui的Style),我采用的是JS的方式:

   一、使用Js創建DataGrid

上面是效果圖,

Html代碼如下:在頁面定義一個table

<!--數據展示 --> <div>   <table id="DataGridInbound"></table> </div>

 Js代碼如下:

 有幾個我自己認為比較重要的屬性在此標記下

url:這里是datagrid獲取數據集的地址,就是你的Action,需要注意的是,你的Action需要返回Json格式的數據。

pagination:設置datagrid是否分頁顯示

queryParams:你的查詢條件參數

formatter:格式化,在日期列用到了,EasyUi的datagrid顯示日期如果不格式話,日期會亂顯示

這些屬性在EasyUi的官網都有詳細介紹,我就不深入解釋了。

$("#DataGridInbound").datagrid({      title: '入庫詳情',      idField: 'Id',      rownumbers: 'true',      url: '/Inbound/GetPageInboundGoodsDetail',      pagination: true,//表示在datagrid設置分頁             rownumbers: true,      singleSelect: true,      striped: true,      nowrap: true,      collapsible: true,      fitColumns: true,      remoteSort: false,      loadMsg: "正在努力加載數據,請稍后...",      queryParams: { ProductName: "", Status: "",SqNo:"" },      onLoadSuccess: function (data) {        if (data.total == 0) {          var body = $(this).data().datagrid.dc.body2;          body.find('table tbody').append('<tr><td width="' + body.width() + '" style="height: 35px; text-align: center;"><h1>暫無數據</h1></td></tr>');          $(this).closest('div.datagrid-wrap').find('div.datagrid-pager').hide();        }          //如果通過調用reload方法重新加載數據有數據時顯示出分頁導航容器        else $(this).closest('div.datagrid-wrap').find('div.datagrid-pager').show();      },      columns: [[        { field: 'ck', checkbox: true },        { field: 'Id', hidden: 'true' },        { field: 'InBoundId', hidden: 'true' },        { field: 'ProductId', hidden: 'true' },        { field: 'ProductTypeId', hidden: 'true' },        { field: 'SqNo', title: '入庫參考號', width: '100', align: 'left', sortable: true },        {          field: 'Status', title: '狀態', width: '100', align: 'left', sortable: true,          formatter: function (value, index, row) {            if (value == "1") {              return '<span style="color:green;">已入庫</span>';            }            else if (value == "-1") {              return '<span style="color:#FFA54F;">待入庫</span>';            }          }        },        {          field: 'InboundDate', title: '入庫日期', width: '100', align: 'left', sortable: true,                    formatter: function (date) {            var pa = /.*/((.*)/)/;            var unixtime = date.match(pa)[1].substring(0, 10); //通過正則表達式來獲取到時間戳的字符串            return getTime(unixtime);          }        },        { field: 'ProductName', title: '產品名稱', width: '100', align: 'left', sortable: true },        { field: 'ProductType', title: '產品類型', width: '100', align: 'left', sortable: true },        { field: 'Num', title: '數量', width: '100', align: 'left', sortable: true },        { field: 'Storage', title: '所屬倉庫', width: '100', align: 'left', sortable: true },        { field: 'CompanyCode', title: '所屬公司', width: '100', align: 'left', sortable: true },        { field: 'CreateBy', title: '操作人', width: '100', align: 'left', sortable: true },      ]],    });

二、今天的重點,DataGrid行內編輯

如上效果圖,我們在DataGrid行內直接變數據

Js代碼如下:

如何實現行內編輯,需要在你所編輯的單元格中加入editor屬性,editor屬性有個type(他支持很多控件類型,可以到官網查看)就是編輯的控件類型。

比如說,上圖中“入庫狀態”,首先我們定義數據源,json格式是重點。

var InboundStatus = [{ "value": "1", "text": "入庫" }, { "value": "-1", "text": "待入庫" }];

然后需要格式轉換函數,不然你選擇的時候只會顯示value值,不是顯示文本值。代碼如下:

function unitformatter(value, rowData, rowIndex) {    if (value == 0) {      return;    }    for (var i = 0; i < InboundStatus.length; i++) {      if (InboundStatus[i].value == value) {        return InboundStatus[i].text;      }    }  }

如何把數據源綁定到DataGrid列中,代碼如下:

formatter:使用我們前面定義的轉換格式函數。

options:中的data就是我們定義的數據源。

valueField:選中后的value值,不用詳細解釋了吧

textField:選中后顯示的值,文本值。

type:combobox,就是下拉選項的樣式。

{        field: 'Status', title: '入庫狀態', formatter: unitformatter, editor: {          type: 'combobox', options: { data: InboundStatus, valueField: "value", textField: "text" }        }      },//這部分代碼請結合下面的創建Grid的Js代碼查看。$("#dataGrid").datagrid({    title: "產品列表",    idField: 'ProductID',    treeField: 'ProductName',    onClickCell: onClickCell,    striped: true,    nowrap: true,    collapsible: true,    fitColumns: true,    remoteSort: false,    sortOrder: "desc",    pagination: true,//表示在datagrid設置分頁           rownumbers: true,    singleSelect: false,    loadMsg: "正在努力加載數據,請稍后...",    url: "/Inbound/GetProductPage",    onLoadSuccess: function (data) {      if (data.total == 0) {        var body = $(this).data().datagrid.dc.body2;        body.find('table tbody').append('<tr><td width="' + body.width() + '" style="height: 35px; text-align: center;"><h1>暫無數據</h1></td></tr>');        $(this).closest('div.datagrid-wrap').find('div.datagrid-pager').hide();      }        //如果通過調用reload方法重新加載數據有數據時顯示出分頁導航容器      else $(this).closest('div.datagrid-wrap').find('div.datagrid-pager').show();    },    columns: [[      { field: 'ck', checkbox: true },      { field: 'ProductID', title: '產品ID', hidden: true },      { field: 'CategoryID', title: '分類ID', hidden: true },      { field: 'ProductName', title: '產品名稱', width: '100', align: 'left', sortable: true },      { field: 'CompanyCode', title: '所屬公司', width: '100', align: 'center', sortable: true },      { field: 'CategoryName', title: '所屬分類', width: '100', align: 'center', sortable: true },      { field: 'Num', title: '數量', editor: 'numberbox' },      {        field: 'Status', title: '入庫狀態', formatter: unitformatter, editor: {          type: 'combobox', options: { data: InboundStatus, valueField: "value", textField: "text" }        }      },      {        field: 'InDate', title: '入庫日期', width: '100', editor: {          type: 'datebox'        }      },      {        field: 'Storage', width: '100', title: '所入倉庫',        formatter: function (value, row) {          return row.Storage || value;        },        editor: {          type: 'combogrid', options: {            //url: '/Storage/GetAllStorage',            //url:'/Product/GetAllCustomerAddress',            rownumbers: true,            data: $.extend(true, [], sdata),            idField: 'AddressID',            textField: 'Name',            columns: [[              { field: 'AddressID', hidden: true },              { field: 'Name', title: '庫名' },              { field: 'Country', title: '國家' },              { field: 'Province', title: '省份' },              { field: 'City', title: '市' },              { field: 'Area', title: '區' },              { field: 'Address', title: '詳細地址' },            ]],            loadFilter: function (sdata) {              if ($.isArray(sdata)) {                sdata = {                  total: sdata.length,                  rows: sdata                }              }              return sdata;            },          }        }      }    ]],    onBeginEdit: function (index, row) {      var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });      $(ed.target).combogrid('setValue', { AddressID: row.AddressID, Name: row.Name });    },    onEndEdit: function (index, row) {      var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });      row.Storage = $(ed.target).combogrid('getText');    },    onClickRow: function (index, row) {//getEditor      var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });      if (ed != undefined) {        var s = row.Storage;        for (var i = 0; i < sdata.length; i++) {          if (s == sdata[i].Name) {            $(ed.target).combogrid('setValue', sdata[i].AddressID);          }        }      }    }  });

三、重頭戲,也是我遇到的問題。

描述:我在datagrid中添加了下拉datagrid控件,當我第一次選中后,如果在去點擊datagrid行,選中的下拉datagrid控件的值會被刷掉,這個問題確實困擾我很久,不過后來處理了,那種感覺也是無比的爽??!

如上效果圖,“所入倉庫”一列,下拉是個datagrid,他的專業詞匯叫“Combogird”。就是這個玩意第一次選中沒問題,第二次點擊會把第一次選中的值刷掉。這也是一開始我對EasyUi的一個OnClickRow事件不了解。

先來上我之前的錯誤代碼:

onClickRow: function (index, row) {//getEditor      var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });            $(ed.target).combogrid('setValue', row.Name);        }      }    }

大家伙一定很苦惱這個row.Name是個什么玩意?what?其實我一開始也不知道,因為這個是錯誤代碼,我是病急亂投醫,胡亂寫的,哈哈,也不是胡亂寫啦,因為我的下拉grid中有個字段是Name,然而我把他混淆了,此row是指你點擊的datagrid的row,而不是你數據源的row。我也是不斷調試Js看出來的端倪。我點擊datagrid的時候,代碼跳入OnClickRow事件中,有句代碼:“var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });”,然后發現ed為null, Js拋異常,但是界面看不出來,只是把選中的數據刷掉了。找到問題后,還是不確定,代碼修改完,再運行,正常顯示,也不刷掉我選中的值。

正確代碼如下:

onClickRow: function (index, row) {//getEditor      var ed = $(this).datagrid('getEditor', { index: index, field: 'Storage' });      if (ed != undefined) {        var s = row.Storage;        for (var i = 0; i < sdata.length; i++) {          if (s == sdata[i].Name) {            $(ed.target).combogrid('setValue', sdata[i].AddressID);          }        }      }    }

 一下是下拉Grid的數據源

function synchroAjaxByUrl(url) {    var temp;    $.ajax({      url: url,      async: false,      type: 'get',      dataType: "json",      success: function (data) {        temp = data;      }    });    return temp;  }  var sdata = synchroAjaxByUrl('/Product/GetAllCustomerAddress');

總結

以上所述是小編給大家介紹的EasyUi控件中的Datagrid,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品久久久中文字幕免费| 欧美成人激情图片网| 国产精品一区专区欧美日韩| 高清欧美电影在线| 日韩精品视频中文在线观看| 欧美性猛交xxxx富婆弯腰| 色综合导航网站| 欧美一区三区三区高中清蜜桃| 精品亚洲夜色av98在线观看| 亚洲免费福利视频| 久久久久一本一区二区青青蜜月| 91色琪琪电影亚洲精品久久| 亚洲老头老太hd| 91久久精品国产91性色| 久久精品最新地址| 亚洲久久久久久久久久| 欧美一区第一页| 91精品视频免费看| 亚洲人成在线电影| 91久久久在线| 色噜噜狠狠色综合网图区| 91在线视频九色| 最近2019中文字幕在线高清| 久久视频在线直播| 96sao精品视频在线观看| 久久久www成人免费精品张筱雨| 国产精品扒开腿做爽爽爽的视频| 亚洲欧美在线免费| 亚洲欧美国产日韩中文字幕| 亚洲第一色中文字幕| 久久久久久噜噜噜久久久精品| 国产成人精品在线| 色777狠狠综合秋免鲁丝| 欧美性视频网站| 日韩中文字幕视频在线| 高跟丝袜一区二区三区| 日韩极品精品视频免费观看| 国产亚洲欧美视频| 136fldh精品导航福利| 国产z一区二区三区| 在线激情影院一区| 亚洲午夜国产成人av电影男同| 在线视频日本亚洲性| 最近2019中文字幕一页二页| 欧美在线性视频| 国产精品亚洲精品| 国内精品久久久久久影视8| 亚洲高清免费观看高清完整版| 欧美夜福利tv在线| 欧美限制级电影在线观看| 欧美日韩亚洲国产一区| 精品国产91久久久久久| 成人国产在线激情| www.久久撸.com| 欧美日韩国产影院| 欧美精品18videosex性欧美| 精品国产欧美一区二区五十路| 精品一区二区电影| 亚洲少妇中文在线| 国产欧美日韩中文字幕在线| 国产欧美日韩免费| 国产精品视频自在线| 亚洲级视频在线观看免费1级| 欧美理论电影在线播放| 亚洲精品免费在线视频| 久久久久成人精品| 青草青草久热精品视频在线观看| 国产精品久久av| 黄色精品一区二区| 欧美精品999| 日韩免费在线免费观看| 久久久久久久亚洲精品| 欧美美最猛性xxxxxx| 色无极影院亚洲| 欧美特级www| 日韩男女性生活视频| 国内精品久久久久久影视8| 亚洲精品福利视频| 国产97色在线| 欧美孕妇毛茸茸xxxx| 国产成人亚洲综合青青| 影音先锋欧美精品| 欧美高清一级大片| 5566成人精品视频免费| 久久激情五月丁香伊人| 68精品久久久久久欧美| 久久久国产一区| 欧美激情视频一区二区三区不卡| 久久精品视频导航| 欧美日韩亚洲精品一区二区三区| 日韩av一区在线观看| 国产成人av在线播放| 精品亚洲一区二区三区在线播放| 曰本色欧美视频在线| 久久精品久久久久久| 亚洲变态欧美另类捆绑| 91伊人影院在线播放| 国产精品欧美日韩久久| 国产日本欧美一区二区三区在线| 午夜精品免费视频| 97超级碰碰碰| 九色精品免费永久在线| 国产视频久久久| 九九热精品在线| 国产精品欧美一区二区| 色与欲影视天天看综合网| 国产91成人video| 日本久久久久久久| 日韩中文理论片| 国产欧美精品一区二区三区-老狼| 欧美成人亚洲成人日韩成人| 91色精品视频在线| 亚洲国产精品成人一区二区| 欧美精品久久久久| 亚洲精品国精品久久99热| 91免费欧美精品| 中文字幕亚洲第一| 欧洲一区二区视频| 久热在线中文字幕色999舞| 欧美亚洲免费电影| 日韩在线中文视频| 中文字幕综合在线| 国内自拍欧美激情| 国产精品高清免费在线观看| 欧美中文字幕视频| 亚洲国产99精品国自产| 欧美性精品220| 国产91|九色| 欧美丰满片xxx777| 亚洲一区二区久久久久久| 欧美性猛交xxxx久久久| 亚洲资源在线看| 精品久久在线播放| 91精品国产高清久久久久久91| 国产激情999| 成人高清视频观看www| 亚洲精品永久免费| 国产拍精品一二三| 狠狠色狠狠色综合日日小说| 欧美成人性生活| 日韩美女写真福利在线观看| 91高清在线免费观看| 亚洲天堂久久av| 国产欧美日韩中文字幕| 一本色道久久88亚洲综合88| 亚洲三级免费看| 国产视频精品久久久| 欧美激情手机在线视频| 日韩视频欧美视频| 国产在线视频不卡| 黑人精品xxx一区一二区| 欧美激情免费视频| 亚洲第一精品久久忘忧草社区| 国产精品第1页| 国产精品一区二区电影| 久久精品在线视频| 一本色道久久88综合亚洲精品ⅰ| 在线观看久久久久久| 亚洲欧洲国产一区| 欧美视频在线观看免费| 91久久精品国产| 亚洲一区二区中文| 国产精品va在线播放我和闺蜜| 欧美成人精品在线|