WPF+WebBrowser+Echarts

本文档展示了如何使用ECharts库创建一个显示营业趋势的HTML页面。首先从GitHub下载ECharts文件,然后在HTML中引入JS包并设置图表配置。接着在后台获取数据并转化为JSON格式,通过WebBrowser控件的InvokeScript方法传递给前端JS函数进行数据显示。示例代码详细解释了日期处理、数据转换和图表渲染的过程。
摘要由CSDN通过智能技术生成

Echarts 文件包下载:https://github.com/apache/incubator-echarts/tree/4.9.0

创建一个html页面引入Echarts的js包

html页面属性改为始终复制,不然的话bin目录下的html不会更新,创建html页面之后最好去bin目录看看没有html页面,没有就直接复制过去

 

js代码:

 var arr = [];//用来存放最近七天的时间

        function getBeforeDate(n) {
            var n = n;
            var d = new Date();
            var year = d.getFullYear();
            var mon = d.getMonth() + 1;
            var day = d.getDate();
            if (day <= n) {
                if (mon > 1) {
                    mon = mon - 1;
                } else {
                    year = year - 1;
                    mon = 12;
                }
            }
            d.setDate(d.getDate() + n); //很重要,+n取得是前一天的时间
            year = d.getFullYear();
            mon = d.getMonth() + 1;
            day = d.getDate();
            s = (mon < 10 ? ('0' + mon) : mon) + "月" + (day < 10 ? ('0' + day) : day) + "日";
            return s;
        }

        for (var i = 0; i > -7; i--) {
            arr.push(getBeforeDate(i));
        }
        window.console = window.console || (function () {
            var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile
                = c.clear = c.exception = c.trace = c.assert = function () { };
            return c;
        })();

  

 var myChart = echarts.init(document.getElementById('main'));
        function jsShowAmount(msg) {
            //msg后台传的值  我传的是字符串格式的json所以要转成json对象
            var date = JSON.parse(msg);
            option = {
                title: {
                    text: '营业趋势'
                },
                tooltip: {
                    trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
                    formatter: '{b}</br> 营业额: {c}元',
                    backgroundColor: 'rgba(255,255,255,0.8)',
                    borderWidth: '1',
                    borderColor: '#FFA000',//提示框颜色
                    textStyle: {
                        color: '#black',//提示框字体颜色
                    }
                },

                xAxis: {
                    type: 'category',//类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
                    boundaryGap: false,
                    data: arr.reverse(),
                    nameGap: 7,//坐标轴名称与轴线之间的距离。
                    axisTick: {//是否显示坐标轴刻度。
                        inside: true//坐标轴刻度是否朝内,默认朝外。
                    }
                },
                yAxis: {
                    type: 'value',
                    nameGap: 15,
                    axisTick: {
                        inside: true
                    }
                },
                series: [{
                    type: 'line',//线条
                    data: date.series,
                    symbol: 'circle',//标记的类型:圆圈
                    itemStyle: {
                        normal: {
                            shadowBlur: 50,//文字块的背景阴影长度。
                            shadowColor: 'red',//文字块的背景阴影颜色。
                            color: 'red',//图形的颜色
                            lineStyle: {
                                color: '#FFA000',//线的颜色
                                width: 1//线的宽度
                            }
                        }
                    }
                }]
            };
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
        }

在xaml中添加WebBrowser

后台代码

在该页面的构造方法中调用Navigate方法 注意:如果bin目录下没有html文件会报路径错误

 wbAmount.Navigate(new Uri(Directory.GetCurrentDirectory() + "/HTML/Chart.html"));

 private void wb_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            mshtml.HTMLDocument dom = (mshtml.HTMLDocument)wbAmount.Document; //定义HTML
            dom.documentElement.style.overflow = "hidden";    //隐藏浏览器的滚动条 
            dom.body.setAttribute("scroll", "no");            //禁用浏览器的滚动条  


             
            KBS.Entity.KbsApiResult<List<DetailData>> detailData = kbsService.Detail(DateTime.Now.AddDays(-7), DateTime.Now, MT_Name.ALL, CCR_PayType.ALL);//这是我需要的数据

            float[] Amount = getAmount(detailData);

            var newObj = new
            {
                series = Amount
            };
            string strJson = JsonConvert.SerializeObject(newObj, Formatting.None);
            wbAmount.InvokeScript("jsShowAmount", strJson);
        }


private float[] getAmount(KbsApiResult<List<DetailData>> list)
        { 

            //当前时间减去的订单时间的时间差作为数组下标,再计算当天的金额
            float[] arr = new float[7]; 
            foreach (var item in list.data)//循环一个星期
            {
                DateTime dateTime = GetDateTime(long.Parse(item.creatTime));//订单时间
                string time = DateTime.Now.ToString("yyyy/MM/dd") + " 23:59:59";//当前时间的最后一毫秒 2020/10/22 23:59:59
                DateTime date = Convert.ToDateTime(time);/
                TimeSpan timeSpan = date.Subtract(dateTime);//计算出时间差 
                arr[timeSpan.Days] += float.Parse(item.corAmount);//timeSpan.Days下标和此次金额
            } 
            return arr ;
        }

 

显示效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值