利用ECharts实现winform中的可视化图表

本文介绍了如何利用ECharts在Winform应用中创建可视化图表。首先,制作一个展示图表的HTML文件,然后使用Web.View2控件将其封装到Winform中。接着,在窗体加载时设置Webview的URL。最后,通过在HTML中添加方法并从Winform调用来实现Winform与HTML的交互,动态加载和更新图表数据。
摘要由CSDN通过智能技术生成

背景

如今web端的图表可以说是非常丰富且用起来方便,ECharts已经非常成熟了,如果在winform中使用那就太好了。

思路

使用winfrom程序封装一个web控件,然后进行展示就可以了,说干就干!

第一步(先搞一个能展示图表的html文件)

按照ECharts官网搞了一个折线图,效果如下
在这里插入图片描述

第二步(封装到winform中)

这里重点强调一下,不要使用webBrowser,因为这个东西的引擎导致一些渲染有问题

引入Web.View2

 <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1722.45" />

在winfrom的工具箱中就能看到控件了

在这里插入图片描述

第三步 写代码

在窗体加载后,将webview的url给到指定的html文件就可以了
我这个放在根目录了

  private void Form1_Load(object? sender, EventArgs e)
        {
            webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "line_chart.html");

        }

到此一切都挺好,能正常显示了。但是不能交互。

第四步 winfrom与html交互

在html中增加方法 如下

 function LoadData(data) {
            myChart.setOption({
                series:  data
            });
        }

html的完整代码如下

<!--
    此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=dynamic-data2
-->
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">
<head>
    <meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
    <div id="container" style="height: 100%"></div>


    <script type="text/javascript" src="echarts.min.js"></script>
   

    <script type="text/javascript">
        var dom = document.getElementById('container');
        var myChart = echarts.init(dom, null, {
            renderer: 'canvas',
            useDirtyRect: false
        });
        var app = {};

        var option;

       
        option = {
            title: {
                text: '这是一个测试数据'
            },
            tooltip: {
                trigger: 'axis',
                
                axisPointer: {
                    animation: true
                }
            },
            xAxis: {
                type: 'category',
                splitLine: {
                    show: false
                }
            },
            yAxis: {
                type: 'value',
                boundaryGap: [0, '100%'],
                splitLine: {
                    show: false
                }
            },
            dataZoom: [{
                type: 'slider',//图表下方的伸缩条
                show: true, //是否显示
                realtime: true, //拖动时,是否实时更新系列的视图
                start: 0, //伸缩条开始位置(1-100),可以随时更改
                end: 100, //伸缩条结束位置(1-100),可以随时更改
            }],
            toolbox: {
                show: true,
                feature: {
                    dataZoom: {
                        yAxisIndex: "none"
                    }
                }
            },
            series: [
            ]
        };
        

        if (option && typeof option === 'object') {
            myChart.setOption(option);
        }

        window.addEventListener('resize', myChart.resize);

       
        function LoadData(data) {
            myChart.setOption({
                series:  data
            });
        }

    </script>
</body>
</html>

在winfrom中增加调用方法

  private void toolStripLabel1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "*.data|*.data";
            openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
            openFileDialog.ShowDialog();
            if (string.IsNullOrEmpty(openFileDialog.FileName)) return;
            var s = File.ReadAllText(openFileDialog.FileName);
            var js = $"let dd = {s};" +
                $"LoadData(dd);";
            webView21.CoreWebView2.ExecuteScriptAsync(js);
        }

数据文件代码

[
  {
    "name": "测试数1",
    "type": "line",
    "showSymbol": false,
    "data": [
      [ "a", 1 ],
      [ "b", 2 ],
      [ "c", 3 ],
      [ "d", 4 ],
      [ "e", 5 ],
      [ "f", 6 ],
      [ "h", 7 ],
      [ "i", 8 ],
      [ "j", 9 ],
      [ "k", 10 ]
    ]
  },
  {
    "name": "测试数2",
    "type": "line",
    "showSymbol": false,
    "data": [
      [ "a", 10 ],
      [ "b", 20 ],
      [ "c", 30 ],
      [ "d", 40 ],
      [ "e", 50 ],
      [ "f", 60 ],
      [ "h", 70 ],
      [ "i", 80 ],
      [ "j", 90 ],
      [ "k", 10 ]
    ]
  }

]

完整的运行效果

请添加图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值