返回过去五年年末余额的数组-(C#)

返回过去五年年末余额的数组-(C#),c#,arrays,C#,Arrays,我试图只返回过去五年的年终信息(12月31日),并在数据网格中显示这些信息。这不包括本年度 我的程序当前显示从上一年到今年最近一个月最后一天的月末信息(示例:当前月份为2011年5月,my DataGrid中显示的信息显示了2010年1月31日;2010年2月28日;2010年3月31日……2010年12月31日;2011年1月31日;2011年2月28日;2011年3月31日;2011年4月30日)存储的数据 它还在2010年12月31日之后和2011年4月30日之后添加了一个总计行。这两个总

我试图只返回过去五年的年终信息(12月31日),并在数据网格中显示这些信息。这不包括本年度

我的程序当前显示从上一年到今年最近一个月最后一天的月末信息(示例:当前月份为2011年5月,my DataGrid中显示的信息显示了2010年1月31日;2010年2月28日;2010年3月31日……2010年12月31日;2011年1月31日;2011年2月28日;2011年3月31日;2011年4月30日)存储的数据

它还在2010年12月31日之后和2011年4月30日之后添加了一个总计行。这两个总计行在新的DataGrid中不需要

下面是返回月末信息的当前代码片段

如果我遗漏了任何信息或对我的问题不清楚,请告诉我

对于这样一个新手问题,我提前表示歉意,过去几天我一直在为这个问题发疯

protected DataSet DS;
protected DataRow dr, dNew;

private void GetInfo()
{

}

private double getDbl(string columnName)
{
    if (dr[columnName] != DBNull.Value)
        return Double.Parse(dr[columnName].ToString());
    return 0;
}

private void Calculate()
{
    double cg, na, n, ka, nka, kaa, tca;
    double tmr, to, gpo;
    int year, rowcnt, rowindx, months;

    months = -1;
    rowindx = 0;
    cg = 0;
    na = 0;
    n = 0;
    ka = 0;
    nka = 0;
    kaa = 0;
    tca = 0;
    tmr = 0;
    tor = 0;
    gpo = 0;

    rowcnt = DS.Tables[0].Rows.Count;

    if (rowcnt > 0) year = Int32.Parse(DS.Tables[0].Rows[0]["cy"].ToString());
    else year = 0;

    for (int i = 0; i < rowcnt; i++)
    {
        months++;
        dr = DS.Tables[0].Rows[i]

        if (year != Int32.Parse(dr["cy"].ToString())
        {
            dNew = DS.Tables[0].NewRow();
            dNew["ind"] = rowindx;
            dNew["cg"] = cg;
            dNew["na"] = na;
            dNew["n"] = n;
            dNew["ka"] = ka / months;
            dNew["nka"] = nka / months;
            dNew["kaa"] = kaa / months;
            dNew["tca"] = tca / months;
            dNew["tmr"] = tmr / months;
            dNew["tor"] = tor;
            dNew["gpo"] = gpo / months;

            cg = 0;
            na = 0;
            n = 0;
            ka = 0;
            nka = 0;
            kaa = 0;
            tca = 0;
            tmr = 0;
            tor = 0;
            gpo = 0;
            months = 1;
            year = Int32.Parse(dr["cy"].ToString());
            rowindx++;

            DS.Tables[0].Rows.Add(dNew);

            dNew = DS.Tables[0].NewRow();
            dNew["ind"] = rowindx;
            rowindx++;
            DS.Tables[0].Rows.Add(dNew);
        }

        cg += getDbl("cg");
        na += getDbl("na");
        n += getDbl("n");
        ka += getDbl("ka");
        nka += getDbl("nka");
        kaa += getDbl("kaa");
        tca += getDbl("tca");
        tmr += getDbl("tmr");
        tor += getDbl("tor");
        gpo += getDbl("gpo");
        dr["ind"] = rowindx;
        rowindx++;
    }

    dNew = DS.Tables[0].NewRow();
    dNew["ind"] = rowindx;
    dNew["cg"] = cg;
    dNew["na"] = na;
         dNew["n"] = naum;
         dNew["ka"] = ka / months;
         dNew["nka"] = nka / months;
         dNew["kaa"] = kaa / months;
         dNew["tca"] = tca / months;
         dNew["tmr"] = tmr / months;
         dNew["tor"] = tor;
         dNew["gpo"] = gpo / months;
         DS.Tables[0].Rows.Add(dNew);

      DS.Tables[0].DefaultView.Sort = "ind";
}
受保护的数据集DS;
受保护的数据行dr、dNew;
私有void GetInfo()
{
}
私有双getDbl(字符串列名称)
{
if(dr[columnName]!=DBNull.Value)
返回Double.Parse(dr[columnName].ToString());
返回0;
}
私有无效计算()
{
双cg、na、n、ka、nka、kaa、tca;
双tmr,to,gpo;
整数年,rowcnt,rowindx,月份;
月数=-1;
rowindx=0;
cg=0;
na=0;
n=0;
ka=0;
nka=0;
kaa=0;
tca=0;
tmr=0;
tor=0;
gpo=0;
rowcnt=DS.Tables[0].Rows.Count;
如果(rowcnt>0)year=Int32.Parse(DS.Tables[0].Rows[0][“cy”].ToString());
其他年份=0;
对于(int i=0;i
您是否尝试过将数据集查询限制在您想要的年份?

您忽略了您的问题。您有什么问题?这些数据来自何处?如果数据来自数据库,我建议您执行一个查询,为您计算数据。我建议您从数据集中删除所有不必要的内容让人们更好地理解你的问题。例如,我不认为所有这些“dNew[“ka”]=ka/月;dNew[“nka”]=nka/月;dNew[“kaa”]=kaa/月应该在那里,他们只是不关注从实际问题中需要帮助的人。是的,数据来自数据库,我将查询设置为返回参数以显示“DateTime.Now.Year-5”它确实带回了过去5年的数据。唯一的问题是它带回了过去5年的月末数据。我得到的不是只有5行(2006、2007、2008、2009、2010),而是50行。我想你需要显示查询。Calculate正在对所有行执行其工作,你要么一次执行一年(在查询中),或者更改循环,使其达到所需的数学效果。您需要发布查询,因为您应该得到60个结果,而不是50个。我觉得这应该没有那么难。基本上,我会考虑更改查询,以便使用年份(因此您将选择5个)。或将for循环更改为一次执行一年。我不确定代码处于当前状态时是否可以执行此操作。请尝试使用伪代码完成您想要执行的操作。可能从查询开始,将最后一条语句更改为cy=:cy。只需先专注于执行一年即可。