BootstrapBlazor组件 Chart 图表介绍

通过给定数据,绘画各种图表的组件

本文主要介绍三种图表使用:折线图,柱状图,饼图





1.新建工程

新建工程b06chart,使用 nuget.org 进行 BootstrapBlazor 组件安装, Chart 库,字体. 将项目添加到解决方案中

  1. dotnet new blazorserver -o b06chart
  2. dotnet add b06chart package BootstrapBlazor
  3. dotnet add b06chart package BootstrapBlazor.FontAwesome
  4. dotnet add b06chart package BootstrapBlazor.Chart
  5. dotnet sln add b06chart/b06chart.csproj

2.样式表和Javascript 引用

增加主题样式表到 Pages/_Layout.cshtml 文件中

删除 <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />

并在下面添加三行

  1. <link href="_content/BootstrapBlazor.FontAwesome/css/font-awesome.min.css" rel="stylesheet" />
  2. <link href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" rel="stylesheet" />
  3. <link href="_content/BootstrapBlazor.Chart/css/bootstrap.blazor.chart.bundle.min.css" rel="stylesheet" />

添加 Javascript 引用到 Pages/_Layout.cshtml 文件中

<script src="_framework/blazor.server.js"></script> 之前添加

  1. <script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js" asp-append-version="true"></script>
  2. <script src="_content/BootstrapBlazor.Chart/js/bootstrap.blazor.chart.bundle.min.js" asp-append-version="true"></script>

3.添加增加命名空间引用到 _Imports.razor 文件中

  1. @using BootstrapBlazor.Components

4.增加 BootstrapBlazorRoot 组件到 App.razor 文件中

  1. <BootstrapBlazorRoot>
  2. <Router AppAssembly="@typeof(App).Assembly">
  3. ...
  4. </Router>
  5. </BootstrapBlazorRoot>

5.添加BootstrapBlazor服务到 Program.cs 文件中

builder.Services.AddSingleton<WeatherForecastService>(); 后加入

  1. builder.Services.AddBootstrapBlazor();

6.组件参数

参数 说明 可选值 默认值
Width 组件宽度支持单位 如: 100px 75%
ChartType 图表类型 Line/Bar/Pie/Doughnut/Bubble Line

7.事件

参数 说明 类型
OnInitAsync 组件数据初始化委托方法 Func<Task>
OnAfterInitAsync 客户端绘制图表完毕后回调此委托方法 Func
OnAfterUpdateAsync 客户端更新图表完毕后回调此委托方法 Func<ChartAction, Task>

8.为了快速建立随机数据,我们建立一个工具类 UtilityChart.cs

代码来源于bb演示工程

  1. using BootstrapBlazor.Components;
  2. namespace b06chart;
  3. /// <summary>
  4. /// Chart 工具类
  5. /// </summary>
  6. internal static class UtilityChart
  7. {
  8. public static IEnumerable<string> Colors { get; } = new List<string>() { "Red", "Blue", "Green", "Orange", "Yellow", "Tomato", "Pink", "Violet" };
  9. /// <summary>
  10. ///
  11. /// </summary>
  12. /// <param name="chart"></param>
  13. public static Task RandomData(Chart chart) => chart.Update(ChartAction.Update);
  14. /// <summary>
  15. ///
  16. /// </summary>
  17. /// <param name="chart"></param>
  18. /// <param name="dsCount"></param>
  19. public static void AddDataSet(Chart chart, ref int dsCount)
  20. {
  21. if (dsCount < Colors.Count())
  22. {
  23. dsCount++;
  24. _ = chart.Update(ChartAction.AddDataset);
  25. }
  26. }
  27. /// <summary>
  28. ///
  29. /// </summary>
  30. /// <param name="chart"></param>
  31. /// <param name="dsCount"></param>
  32. public static void RemoveDataSet(Chart chart, ref int dsCount)
  33. {
  34. if (dsCount > 1)
  35. {
  36. dsCount--;
  37. _ = chart.Update(ChartAction.RemoveDataset);
  38. }
  39. }
  40. /// <summary>
  41. ///
  42. /// </summary>
  43. /// <param name="chart"></param>
  44. /// <param name="daCount"></param>
  45. public static void AddData(Chart chart, ref int daCount)
  46. {
  47. var limit = chart.ChartType switch
  48. {
  49. ChartType.Line => 14,
  50. ChartType.Bar => 14,
  51. ChartType.Bubble => 14,
  52. _ => Colors.Count()
  53. };
  54. if (daCount < limit)
  55. {
  56. daCount++;
  57. _ = chart.Update(ChartAction.AddData);
  58. }
  59. }
  60. /// <summary>
  61. ///
  62. /// </summary>
  63. /// <param name="chart"></param>
  64. /// <param name="daCount"></param>
  65. public static void RemoveData(Chart chart, ref int daCount)
  66. {
  67. var limit = chart.ChartType switch
  68. {
  69. ChartType.Line => 7,
  70. ChartType.Bar => 7,
  71. ChartType.Bubble => 4,
  72. _ => 2
  73. };
  74. if (daCount > limit)
  75. {
  76. daCount--;
  77. _ = chart.Update(ChartAction.RemoveData);
  78. }
  79. }
  80. }

9.折线图

  1. <p>折线图</p>
  2. <Chart @ref="LineChart" OnInitAsync="() => OnInit(0.4f, false)" Width="50%" />
  3. <button class="btn btn-primary" @onclick="e => UtilityChart.RandomData(LineChart)"><i class="fa fa-line-chart"></i><span>随机数据</span></button>
  4. @code{
  5. private Random Randomer { get; } = new Random();
  6. private int LineDatasetCount = 2;
  7. private int LineDataCount = 7;
  8. private Chart? LineChart { get; set; }
  9. private Task<ChartDataSource> OnInit(float tension, bool hasNull)
  10. {
  11. var ds = new ChartDataSource();
  12. ds.Options.Title = "Line 折线图";
  13. ds.Options.X.Title = "天数";
  14. ds.Options.Y.Title = "数值";
  15. ds.Labels = Enumerable.Range(1, LineDataCount).Select(i => i.ToString());
  16. for (var index = 0; index < LineDatasetCount; index++)
  17. {
  18. ds.Data.Add(new ChartDataset()
  19. {
  20. Tension = tension,
  21. Label = $"数据集 {index}",
  22. Data = Enumerable.Range(1, LineDataCount).Select((i, index) => (index == 2 && hasNull) ? null! : (object)Randomer.Next(20, 37))
  23. });
  24. }
  25. return Task.FromResult(ds);
  26. }
  27. }

10.柱状图

  1. <p>柱状图</p>
  2. <Chart ChartType="ChartType.Bar" OnInitAsync="() => OnInit(false)" @ref="BarChart" Width="50%" />
  3. <button class="btn btn-primary" @onclick="e => UtilityChart.RandomData(BarChart)"><i class="fa fa-bar-chart"></i><span>随机数据</span></button>
  4. @code{
  5. private int BarDatasetCount = 2;
  6. private int BarDataCount = 7;
  7. private Chart? BarChart { get; set; }
  8. private Task<ChartDataSource> OnInit(bool stacked)
  9. {
  10. var ds = new ChartDataSource();
  11. ds.Options.Title = "Bar 柱状图";
  12. ds.Options.X.Title = "天数";
  13. ds.Options.Y.Title = "数值";
  14. ds.Options.X.Stacked = stacked;
  15. ds.Options.Y.Stacked = stacked;
  16. ds.Labels = Enumerable.Range(1, BarDataCount).Select(i => i.ToString());
  17. for (var index = 0; index < BarDatasetCount; index++)
  18. {
  19. ds.Data.Add(new ChartDataset()
  20. {
  21. Label = $"数据集 {index}",
  22. Data = Enumerable.Range(1, BarDataCount).Select(i => Randomer.Next(20, 37)).Cast<object>()
  23. });
  24. }
  25. return Task.FromResult(ds);
  26. }
  27. }

11.饼图

  1. <p>饼图</p>
  2. <Chart ChartType="ChartType.Pie" OnInitAsync="@OnInit" @ref="PieChart" Width="50%" />
  3. <button class="btn btn-primary" @onclick="e => UtilityChart.RandomData(PieChart)"><i class="fa fa-pie-chart"></i><span>随机数据</span></button>
  4. @code{
  5. private int PieDatasetCount = 1;
  6. private int PieDataCount = 5;
  7. private Chart? PieChart { get; set; }
  8. private Task<ChartDataSource> OnInit()
  9. {
  10. var ds = new ChartDataSource();
  11. ds.Options.Title = "Pie 饼图";
  12. ds.Labels = UtilityChart.Colors.Take(PieDataCount);
  13. for (var index = 0; index < PieDatasetCount; index++)
  14. {
  15. ds.Data.Add(new ChartDataset()
  16. {
  17. Label = $"数据集 {index}",
  18. Data = Enumerable.Range(1, PieDataCount).Select(i => Randomer.Next(20, 37)).Cast<object>()
  19. });
  20. }
  21. return Task.FromResult(ds);
  22. }
  23. }

12.未完待续

通过简单的步骤,已经可以初步体验图表组件,由于近日事务较多,这篇只是初略的带大家快速入门,体验一下BootstrapBlazor的Chart 图表使用. 下一篇章我们将会对组件进行一些调整,例如添加移除数据集,添加移除数据,X轴Y轴数据改变后如何刷新组件,以及跟数据库结合查询生成图表.

项目源码

Github | Gitee

关联项目

FreeSql QQ群:4336577(已满)、8578575(已满)、52508226(在线)

BA & Blazor QQ群:795206915、675147445

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow(包含链接: https://github.com/densen2014 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

AlexChow

今日头条 | 博客园 | 知乎 | Gitee | GitHub

BootstrapBlazor实战 Chart 图表使用(1)的更多相关文章

  1. NPOI根据模板生成chart图表导出Excel

    导入NPOI的全部dll. 因为NPOI的API里面还没有对于Chart图表方面的操作,所以只能根据提示做好的图表作为模板,修改数据源的方法来改变图表. 注意:NPOI要用2003版以下的excel才 ...

  2. Winform中Chart图表的简单使用

    在常见的一些数据采集的系统中, 都少不了一个就是, 数据分析, 无论是报表的形式, 还是图形的形式. 他都是可以迅速的展现一个数据趋势的实现方法, 而今天, 就是简单介绍一下, 微软的工具库自带的 C ...

  3. 基于HTML5 Canvas的3D动态Chart图表

    发现现在工业SCADA上或者电信网管方面用图表的特别多,虽然绝大部分人在图表制作方面用的是echarts,他确实好用,但是有些时候我们不能调用别的插件,这个时候就得自己写这些美丽的图表了,然而图表轻易 ...

  4. 关于微软C#中的CHART图表控件的简单使用【转】

    最近公司项目要用到Chart图表控件,这是一个比较老的东西了,目前网络上似乎已经不太流行这个控件,但是只要配置了相关的属性,效果还是可以的.前前后后摸索了好久,接下来谈谈这个件控件最重要的几个属性. ...

  5. Chart图表整合——面积对比图、扇形图、柱状图

    一. chart图表demo网址 网址:http://antv.alipay.com/zh-cn/f2/3.x/demo/index.html 二. 本文主要对面积对比图,扇形图,柱状图三大常见图进行 ...

  6. 关于微软C#中的CHART图表控件的简单使用

    最近公司项目要用到Chart图表控件,这是一个比较老的东西了,目前网络上似乎已经不太流行这个控件,但是只要配置了相关的属性,效果还是可以的.前前后后摸索了好久,接下来谈谈这个件控件最重要的几个属性. ...

  7. C#chart图表的应用

    在图表中,x轴代表类别,y轴代表数值(好比类与他们的属性) 这是数据库中的数据,下面我们选前5辆车,在图表中显示他们的名字,油耗,功率,价格 创建查询数据的类 class CarDA { public ...

  8. poi自动生成Ecxel表格和Chart图表

    最近因为业务需求,需要做poi自动导出Ecxel表格和Chart折线图的功能. 所以我在网上找到了一篇关于poi生成Chart图表的博客,代码很详细,但是缺少相关注释说明. 想要将它改造成自己需要的样 ...

  9. BootstrapBlazor实战-Tree树形控件使用(1)

    实战BootstrapBlazor树型控件Tree的使用, 以及整合Freesql orm快速制作数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/Sql ...

随机推荐

  1. php 命名规范

  2. 微信小程序缓冲类的封装

    1:utils 目录下新建一个Cache.js文件 2:文件下书写以下代码: // 缓存类 class Cache { // 构造方法 单位秒 constructor({ expire = 3600 ...

  3. 一比一还原axios源码(零)—— 概要

    从vue2版本开始,vue-resource就不再被vue所维护和支持,官方也推荐使用axios,所以,从我使用axios至今,差不多有四五年了,这四五年的时间只能算是熟练应用,很多内部的实现和原理不 ...

  4. 1、mysql数据库的数据目录结构

    查看mysql的主要目录结构 通过命名查看mysql的目录结构:find / -name mysql 1.1数据库文件的存放路径 MySQL数据库文件的存放路径:/var/lib/mysql/ 1.2 ...

  5. Net6 Configuration & Options 源码分析 Part2 Options

    Net6 Configuration & Options 源码分析 Part2 Options 第二部分主要记录Options 模型 OptionsConfigurationServiceCo ...

  6. Div+CSS 定位 Position

    position 属性规定应用于元素的定位方法的类型(static.relative.fixed.absolute 或 sticky). position: static;HTML 元素默认情况下的定 ...

  7. 4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论

    一.套接字UDP udp是无链接的,先启动哪一端都不会报错 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...

  8. python单ip端口扫描器

    from socket import * import threading #导入线程相关模块 # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_363 ...

  9. 74CMS 3.0 SQL注入漏洞前台

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  10. MYSQL5.7详细安装步骤

    0.更换yum源 1.打开 mirrors.aliyun.com,选择centos的系统,点击帮助 2.执行命令:yum install wget -y 3.改变某些文件的名称 mv /etc/yum ...