提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2021-05-18 10:05:16.540|阅读 159 次
概述:本文主要介绍如何将Kendo UI PivotGrid小部件与Kendo UI图表小部件集成。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Kendo UI for jQuery R1 2021 SP2试用版下载
Kendo UI是带有jQuery、Angular、React和Vue库的JavaScript UI组件的最终集合,无论选择哪种JavaScript框架,都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件,Kendo UI可以创建数据丰富的桌面、平板和移动Web应用程序。通过响应式的布局、强大的数据绑定、跨浏览器兼容性和即时使用的主题,Kendo UI将开发时间加快了50%。
下面的示例演示如何将Kendo UI PivotGrid小部件与Kendo UI图表小部件集成。
<div id="example"> <div id="pivotgrid"></div> <div id="chart"></div> <script> //function flatten the tree of tuples that datasource returns function flattenTree(tuples) { tuples = tuples.slice(); var result = []; var tuple = tuples.shift(); var idx, length, spliceIndex, children, member; while (tuple) { //required for multiple measures if(tuple.dataIndex !== undefined) { result.push(tuple); } spliceIndex = 0; for (idx = 0, length = tuple.members.length; idx < length; idx++) { member = tuple.members[idx]; children = member.children; if (member.measure) { [].splice.apply(tuples, [0, 0].concat(expandMeasures(children, tuple))); } else { [].splice.apply(tuples, [spliceIndex, 0].concat(children)); } spliceIndex += children.length; } tuple = tuples.shift(); } return result; } function clone(tuple, dataIndex) { var members = tuple.members.slice(); return { dataIndex: dataIndex, members: $.map(members, function(m) { return $.extend({}, m, { children: [] }); }) }; } function replaceLastMember(tuple, member) { tuple.members[tuple.members.length - 1] = member; return tuple; }; function expandMeasures(measures, tuple) { return $.map(measures, function(measure) { return replaceLastMember(clone(tuple, measure.dataIndex), measure); }); } //Check whether the tuple has been collapsed function isCollapsed(tuple, collapsed) { var members = tuple.members; for (var idx = 0, length = collapsed.length; idx < length; idx++) { var collapsedPath = collapsed[idx]; if (indexOfPath(fullPath(members, collapsedPath.length -1), [collapsedPath]) !== -1) { return true; } } return false; } //Work with tuple names/captions function indexOfPath(path, paths) { var path = path.join(","); for (var idx = 0; idx < paths.length; idx++) { if (paths[idx].join(",") === path) { return idx; } } return -1; } function fullPath(members, idx) { var path = []; var parentName = members[idx].parentName; idx -= 1; while (idx > -1) { path.push(members[idx].name); idx -= 1; } path.push(parentName); return path; } function memberCaption(member) { return member.caption }; function extractCaption(members) { return $.map(members, memberCaption).join(" "); }; function fullPathCaptionName(members, dLength, idx) { var result = extractCaption(members.slice(0, idx + 1)); var measureName = extractCaption(members.slice(dLength, members.mLength)); if (measureName) { result += " - " + measureName; } return result; } //the main function that convert PivotDataSource data into understandable for the Chart widget format function convertData(dataSource, collapsed) { var columnDimensionsLength = dataSource.columns().length; var rowDimensionsLength = dataSource.rows().length; var columnTuples = flattenTree(dataSource.axes().columns.tuples || [], collapsed.columns); var rowTuples = flattenTree(dataSource.axes().rows.tuples || [], collapsed.rows); var data = dataSource.data(); var rowTuple, columnTuple; var idx = 0; var result = []; var columnsLength = columnTuples.length; for (var i = 0; i < rowTuples.length; i++) { rowTuple = rowTuples[i]; if (!isCollapsed(rowTuple, collapsed.rows)) { for (var j = 0; j < columnsLength; j++) { columnTuple = columnTuples[j]; if (!isCollapsed(columnTuple, collapsed.columns)) { if (idx > columnsLength && idx % columnsLength !== 0) { for (var ri = 0; ri < rowTuple.members.length; ri++) { for (var ci = 0; ci < columnTuple.members.length; ci++) { //do not add root tuple members, e.g. [CY 2005, All Employees] //Add only children if (!columnTuple.members[ci].parentName || !rowTuple.members[ri].parentName) { continue; } result.push({ measure: Number(data[idx].value), column: fullPathCaptionName(columnTuple.members, columnDimensionsLength, ci), row: fullPathCaptionName(rowTuple.members, rowDimensionsLength, ri) }); } } } } idx += 1; } } } return result; } </script> <script> $(document).ready(function () { var collapsed = { columns: [], rows: [] }; var pivotgrid = $("#pivotgrid").kendoPivotGrid({ filterable: true, //gather the collapsed members collapseMember: function(e) { var axis = collapsed[e.axis]; var path = e.path; if (indexOfPath(path, axis) === -1) { axis.push(path); } }, //gather the expanded members expandMember: function(e) { var axis = collapsed[e.axis]; var index = indexOfPath(e.path, axis); if (index !== -1) { axis.splice(index, 1); } }, columnWidth: 100, height: 330, dataSource: { type: "xmla", columns: [{ name: "[Date].[Calendar]", expand: true }, { name: "[Employee].[Gender]" }], rows: [{ name: "[Product].[Category]", expand: true }], measures: ["[Measures].[Reseller Freight Cost]", "[Measures].[Internet Order Quantity]"], transport: { connection: { catalog: "Adventure Works DW 2008R2", cube: "Adventure Works" }, read: "//demos.telerik.com/olap/msmdpump.dll" }, schema: { type: "xmla" }, error: function (e) { alert("error: " + kendo.stringify(e.errors[0])); } }, dataBound: function() { //create/bind the chart widget initChart(convertData(this.dataSource, collapsed)); } }).data("kendoPivotGrid"); function initChart(data) { var chart = $("#chart").data("kendoChart"); if (!chart) { $("#chart").kendoChart({ dataSource: { data: data, group: "row" }, series: [{ type: "column", field: "measure", name: "#= group.value # (category)", categoryField: "column" }], legend: { position: "bottom" }, categoryAxis: { labels: { rotation: 310 } }, valueAxis: { labels: { format: "${0}" } }, dataBound: function(e) { var categoryAxis = e.sender.options.categoryAxis; if (categoryAxis && categoryAxis.categories) { categoryAxis.categories.sort(); } } }); } else { chart.dataSource.data(data); } } }); </script> </div>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
全新升级的Kendo UI,是创建数据丰富的Web应用程序的最完整UI库。
Kendo UI for jQuery完整的jQuery UI组件库,可快速构建出色的高性能响应式Web应用程序。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢