日期:2014-05-20  浏览次数:20627 次

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");//改成你的求和的别名字段