C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)

啊哈,第一次写,因为刚做好一个系统,本人水平不高,遇到问题很急躁,但是好在压着性子做出来了。只想记录一下我做的过程,给和我一样不懂的朋友借鉴,希望大家都能更好。不至于遇到问题找不到很快能实施的办法,焦躁焦躁。

我的系统是基于C# Winform开发的一个校园卡管理系统,加了一个数据可视化功能,所以需要把数据库的数据实时展示出来,听起来“实时”很吓人,但是其实每个操作执行后都会更新到数据库里,每次重新读数据库的信息就是“实时”了。毕竟咱只是个模拟系统。

如何从Visual Studio2019的工具栏找出chart控件并拖拽到默认界面应该不用多说吧,找不到工具栏的话开发界面最上面有个搜索框,搜一下就出来了。如果再没有可以百度,这是开发软件的基础配置问题。

鼠标点击你的chart控件(默认是个柱状图),在属性框里有很多属性栏目。其中关于chart控件最主要的图表属性里有5个属性:

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第1张图片

上面这几个。刚开始我也不懂,很焦躁地点来点去,因为找到的教程大多是代码画图,要么就是版本不一样的vs对不上号,看不懂。但是如果你用探索的心态去玩,会发现,喔~

这里贴一个对我帮助很大的链接,是简书上的一个小伙伴,BigbyLong,感谢,侵删。C#中Chart的简单使用(柱状图和折线图) - 简书 (jianshu.com)

哦,给你们看一下我的实验对象:

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第2张图片

自己在项目之外开个“实验品”,放心大胆地跟着教程尝试。

那就先,散点图吧。所有的教程都告诉我,series属性贼重要,实践后我非常赞同。

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第3张图片

 点击charttype后,有好多选择,那我们选第一个point图。

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第4张图片

然后你就看见默认的柱形图变成了散点图。啊,接下来我可不是要带你设置散点图的标题、背景、颜色之类的,我要把数据放进去了。最简单的逻辑:用数组存储好你要的数据,然后用函数DataBindXY(数组A, 数组B); 把数据和chart绑定,就实现了。

我是这么做的。先想一想,你要用散点图干嘛。x轴,横轴,代表什么。y轴代表什么。

我的横轴是日期,纵轴是一个学生在这个日期用餐的次数。那就简单了,我用sql语句从数据库读取一下,这个人在这个日期中所有的用餐记录条数就可以了,然后把今天以前的6天数据也读取,存到对应于y轴数值的数组里,(毕竟这个图还是能看到好几天的数据),然后绑定下就好啦。上代码:

 //根据选择的时间+学号,查询当日在ABC的总消费次数。
 int[] num = new int[] {0,0,0,0,0,0 };//y轴数值数组,存储次数
string[] riqi = new string[] {"","","","","","" };//x轴数值数组,存储对应的日期

 DataLink dl = new DataLink();//数据库链接
string sql = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{dateTimePicker1.Value.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            IDataReader dc = dl.read(sql);//读取数据
            while (dc.Read())
            {
                num[0] = int.Parse(dc[0].ToString());//把次数存储起来
            }
            riqi[0] = dateTimePicker1.Value.ToString("yyyy-MM-dd");

            DateTime date = dateTimePicker1.Value.AddDays(-1);
            string sql2 = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{date.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            dc = dl.read(sql2);
            while (dc.Read())
            {
                num[1] = int.Parse(dc[0].ToString());
            }
            riqi[1] = date.ToString("yyyy-MM-dd");

            date = dateTimePicker1.Value.AddDays(-2);
            string sql3 = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{date.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            dc = dl.read(sql3);
            while (dc.Read())
            {
                num[2] = int.Parse(dc[0].ToString());
            }
            riqi[2] = date.ToString("yyyy-MM-dd");

            date = dateTimePicker1.Value.AddDays(-3);
            string sql4 = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{date.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            dc = dl.read(sql4);
            while (dc.Read())
            {
                num[3] = int.Parse(dc[0].ToString());
            }
            riqi[3] = date.ToString("yyyy-MM-dd");

            date = dateTimePicker1.Value.AddDays(-4);
            string sql5 = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{date.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            dc = dl.read(sql5);
            while (dc.Read())
            {
                num[4] = int.Parse(dc[0].ToString());
            }
            riqi[4] = date.ToString("yyyy-MM-dd");

            date = dateTimePicker1.Value.AddDays(-5);
            string sql6 = $"select count(*) from CardADB.dbo.Bill where cardNum='{textBox1.Text}' and sellDate='{date.ToString("yyyy-MM-dd")}' and (place ='A食堂' or place = 'B食堂' or place = 'C食堂')";
            dc = dl.read(sql6);
            while (dc.Read())
            {
                num[5] = int.Parse(dc[0].ToString());
            }
            riqi[5] = date.ToString("yyyy-MM-dd");

            chart3.Series[0].Points.DataBindXY(riqi, num);
            dc.Close();
            dl.DaoClose();

 哎呀。我不会像别人那样搞个专门粘贴代码的背景,看起来不太舒服。可恶。先这样,下次我试试看怎么弄。

对了,上面的代码我放在一个按钮的点击事件里面了,还有个datetimepicker控件用来选查看的日期、一个textbox输入学生学号的。那就看下运行结果。

这是啥也没有的状态,因为我没有设置默认下的样子。要设置的话,也是在series里点击point添加数值。

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第5张图片

 这是没输入学号的结果。啥也没有。

 C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第6张图片

 最后输入学号、选择日期,就是结果图了。

C# Winform Chart控件展示sql数据的 柱状图、折线图、饼图和散点图(1)_第7张图片

 好啦,不想写太多很罗嗦,其他的放在下一章。拜拜。

你可能感兴趣的:(C#,Winform,Chart控件,c#,开发语言)