首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

MSChart简单有关问题求解

2012-12-24 
MSChart简单问题求解刚开始搞MSChart,一来就碰到问题了,求大侠帮忙。VS2008, Winform窗体程序是这样的,我想

MSChart简单问题求解
刚开始搞MSChart,一来就碰到问题了,求大侠帮忙。
VS2008, Winform窗体程序

是这样的,我想实现X轴日期,Y轴数据
X轴直接在代码里用for循环写(每月日期不一样,我先获得当月的天数)


            //计算当月有几天
            int intDayCount = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

            for (int i = 1; i < intDayCount; i++)
            {
                series.Points.AddXY(i, 0);
            }

 这样子X轴倒是对的,Y轴所有列上都有一个数字0
Y轴数据原意是从数据库里取得的,但是数据库里当月并不是都有数据,比如11月份只有3天有数据,这样取出来只有3行数据,用series.Points.AddY();

我是想问如何取消掉第一步所写的Y轴上的0数字。
或者谁能告诉我一下,如何单独对X轴写上每月的日期,比如,11月的所有天数都写上。


[解决办法]

            DataTable dt = new DataTable("Data");
            dt.Columns.Add("Day", typeof(DateTime));
            dt.Columns.Add("Val", typeof(int));
            //数据库数据
            dt.Rows.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1), 35);
            dt.Rows.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 5), 53);
            dt.Rows.Add(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 15), 25);

            chart1.Series[0].ChartType = SeriesChartType.Column;
            //柱状图
            chart1.Series[0].Points.DataBindXY(dt.DefaultView, "Day", dt.DefaultView, "Val");
            //格式化 按天数显示
            chart1.ChartAreas[0].AxisX.Interval = 1;
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "dd";

[解决办法]
也就是x显示每天的数据y显示是每天对应的数量
比如1月有31天 那么按理论就是x就是31条记录,不过应该是<=31因为有的时候比如周末或者世界末日,数据库里面可能是没有数据的。
其实这个不难很简单的 一开是我也是不会不过……不知道怎么就写出来了
2个值 一个是x轴(时间)一个是y轴(时间对应的数据)
首先需要格式化时间在group by 时间字段,sql查询的时候取时间的格式是yyyy-mm-dd后面的时分秒一定不要加,因为加了group by 时间字段就没意思了,去掉时分秒再group by 时间字段就能取得每一天的sum总量了
select sum(字段)sums,时间字段 as times from table group by 时间字段
这样取记录不会超过31条的,这样就把指定月份的每天的总量取出来了 OK
取出来后放到chart控件的x和y上 x绑定的是times y绑定的是sums
如下以前写的 测试没问题
 
DataTable dt = new DataTable();
            dt.Columns.Add("days");//改成你的时间字段
            dt.Columns.Add("daysTrafficSum");//改成你的求和的别名字段
            


            dt = owam.getDaysTrafficByUsername(userName, type, startDate, endDate);  //调用业务层的方法
            
            //设置图表的数据源
            dayChart.DataSource = dt;

            //设置图表Y轴对应项
            dayChart.Series[0].XValueMember = "days";//同上
            dayChart.Series[0].YValueMembers = "daysTrafficSum";//同上
           dayChart.Series[0].Name = userName+" 前30天 O"+type+"A 下载附件趋势图";
            dayChart.ChartAreas["ChartArea1"].AxisX.MajorGrid.Interval = 1;
            dayChart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Interval = 1;

热点排行