// <summary>
// 绘制检修容量迁移曲线图
// <date>2005/08/04</date>
// </summary>
 private bool IsRunNian (int year)   //判断查询年是否为闰年
 {
return ((year %4 ==0 && year %100 != 0)|| year %400 =0);
 }
private int daysofmonth(int year,int month)
{   
int n = 0;
switch (month)
{
case 1: n = 31; break;
                case 2: n = IsRunNian(year)?29:28; break;
case 3: n = 31; break;
case 4: n = 30; break;
case 5: n = 31; break;
case 6: n = 30; break;
case 7: n = 31; break;
case 8: n = 31; break;
case 9: n = 30; break;
case 10: n = 31;break;
case 11: n = 30;break;
case 12: n = 31;break;
}
return n;

}
private string[,] date1(int year,int month)
{
int n = daysofmonth(year,month);
string[,] date2 = new string[13,31];
for(int i=1;i<n;i++)
{
date2[month][i] = year.ToString+month.ToString+i.ToString;
}
return date2;
}  private string[,] Date(int year, int quarter)  //获得日期
 {
string[,] date = new string[13,31];
switch (quarter)
{
case 1: date1(year,1);
    date1(year,2);
    date1(year,3);
    break;
                case 2: date1(year,4);
    date1(year,5);
    date1(year,6);
    break;
case 3: date1(year,7);
    date1(year,8);
    date1(year,9);
    break;
case 4: date1(year,10);
    date1(year,11);
    date1(year,12);
    break;
}
            date = date1();  
 }
        private void drawcurve()
{
MSChartCreator mc = new mschartcreator();
mc.chartType = MSChart20Lib.vtchcharttype.vtchcharttype2dline; double[,] data = new double[91,1];
double[,] jxrl = new double[91,1]; //jxrl:检修容量
double max = 0.0;
DataTable[] dt = new Datatable(); //存放所查到每天的检修容量数据
int q = 0;
try 
{
    int year = Int32.Parse(DTPickerNianDu.Text);


catch 
{
LogWriter.Debug("得到控件年度解析成 Int32 失败" + DTPickerNianDu.Text);
return ;
}

string str = cobJiDu.SelectedItem.ToString().Trim();
if (str.Equals("第一季度") == true)  
{
q = 1;
}
if (str.Equals("第二季度") == true)  
{
q = 2;
}
if (str.Equals("第三季度") == true)  
{
q = 3;
}
if (str.Equals("第四季度") == true)  
{
q = 4;
}

for (int i=1;i<=90;i++)
{
string sql = "select  b.edingrongliang from j_jizujianxiu as a, m_jizu_xinxi as b" 
+" where a.bingwangshijian >= "+Date(year,q) +" and a.jizuid = b.jizuid";
    
try 
{
dt[i] = ConnectionPool.GetConnection().Select(sql);
}
catch 
{
logwriter.debug("执行sql语句出错");
throw new Exception();
}
for (int j = 1; j<=dt[i].Rows.Count-1;j++)
{
jxrl[i]+=double.parse(dt[i].Rows[j][0].tostring());
}
data[i-1,0] = jxrl[i];
} mc.RowCount = 90;
mc.ColCount = 1;
mc.SetXYValueScaleCore(90, 1, 1, 1, true);
mc.SetXYValueScaleCore(max, 0, 10, 1, false);
mc.SetData(data, 90, 1);// string[] labs = new string[12];
// for (int i = 0; i < 12; i ++) 
// {
// labs[i] = (i + 1) + "月";
// }
// mc.setrowslabel(labs); mc.dock = system.windows.forms.dockstyle.fill;
if (this.panel1 != null) 
{
this.panel1.Controls.Clear();
this.panel1.controls.add(mc);
}
this.panel1.controls.add(mc);
}

解决方案 »

  1.   

    这里劝兄弟一句,对日期的操作C# 提供了很多的现成类方法啊,很容易就能实现你的功能(如闰年datetime.isLeapYear)啊,你这样真的很麻烦.而且最好将错误的编译信息贴出方便查找错误源
      

  2.   

    谢谢楼上兄弟的教导,我现在是判断一个整数,不是一个日期型的数呀,这样恐怕要简便些,我这个程序错误太多太多了,我现在也正在修改中,这段是为了实现画一个曲线图的功能,需把所查询某年某季度每天的数值查询出来,然后再作为参数传给坐标系连线函数mc.SetData,思路就是这样,现在就是如何得到参数,包括横坐标时间(也就是季度中的每一天),纵坐标需要到数据库中结合横坐标来求得,比较麻烦啊!
    大家多多赐教!!!小弟不胜感谢
      

  3.   

    真头疼说说表现 指出重点我可不想看这代码qfkx.com
      

  4.   

    private string[,] date1(int year,int month)
    {
    int n = daysofmonth(year,month);
    string[,] date2 = new string[13,31];
    for(int i=1;i<n;i++)
    {
    date2[month][i] = year.ToString+month.ToString+i.ToString;
    }
    return date2;
    }
     这里的date2有问题,老报错说date2的month内索引出错
      

  5.   

    一个月最多可能31天,只写string[13,31]肯定不够了,应该再加一string[13, 32]
      

  6.   

    DataTable[] dt = new DataTable[];
    老报错说没有初始化,怎办?高手们给点建议啊
      

  7.   

    要给出数组大小啊!如果想用动态数组就要用ArrayList.