gridview合计问题

左手青春右手年华 2016-01-14 01:28:37
      <asp:GridView ID="gdvIn" CellSpacing="0" CellPadding="0" BorderStyle="None" 
CssClass="Contenttable" runat="server" AutoGenerateColumns="False"
ShowHeader="False" Width="100%" EnableTheming="false" GridLines="None">
<Columns>
<asp:BoundField DataField="categoryname" HeaderText="收支项目">
<ItemStyle CssClass="viewcateName"/></asp:BoundField>
<asp:TemplateField HeaderText="第1月">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("month1") %>' ForeColor='<%# returnColor(decimal.Parse(Eval("month1").ToString())) %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="gridwidth"/>
</asp:TemplateField>
<asp:TemplateField HeaderText="第2月">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("month2") %>' ForeColor='<%# returnColor(decimal.Parse(Eval("month2").ToString())) %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="gridwidth"/>
</asp:TemplateField>

---------------------------------------------分割线--------gdvIn和gdvOut是分别独立而非嵌套的Gridview--------------------------------------------
<asp:GridView ID="gdvOut" CellSpacing="0" CssClass="Contenttable"
runat="server" AutoGenerateColumns="False"
ShowHeader="False" Width="100%" EnableTheming="false" GridLines="None">
<Columns>
<asp:BoundField DataField="categoryname" HeaderText="收支项目">
<ItemStyle CssClass="viewcateName"/></asp:BoundField>
<asp:TemplateField HeaderText="第1月">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("month1") %>' ForeColor='<%# returnColor(decimal.Parse(Eval("month1").ToString())) %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="gridwidth"/>
</asp:TemplateField>
<asp:TemplateField HeaderText="第2月">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("month2") %>' ForeColor='<%# returnColor(decimal.Parse(Eval("month2").ToString())) %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="gridwidth"/>
</asp:TemplateField>
<asp:TemplateField HeaderText="第3月">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("month3") %>' ForeColor='<%# returnColor(decimal.Parse(Eval("month3").ToString())) %>'></asp:Label>
</ItemTemplate>


图1

图2


 //显示合计
int inCount = gdvIn.Rows.Count - 1;
int outCount = gdvOut.Rows.Count - 1;
for (int i = 1; i < gdvIn.Columns.Count;i++ )
{
Label lblIn = (Label)gdvIn.Rows[inCount].FindControl("Label"+i.ToString());
Label lblOut = (Label)gdvOut.Rows[outCount].FindControl("Label" + i.ToString());
Label lblSum = (Label)Page.FindControl("sum"+i.ToString());
decimal sum = decimal.Parse(lblIn.Text) - decimal.Parse(lblOut.Text);
lblSum.Text = sum.ToString("F2");
if(sum<0)
{
lblSum.ForeColor = System.Drawing.Color.Red;
}


问题是:1-11月都是收入小计和支出小计都是正确的,但12月不显示各自合计这是错误呢?思维定势了,求大侠们指点迷津。
...全文
238 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
还未收到满意答案,结贴吧
Hello World, 2016-01-15
  • 打赏
  • 举报
回复
gdvIn.Columns.Count=12的话,循环需要改为 for (int i = 1; i <= gdvIn.Columns.Count;i++ )
lutaotony 2016-01-15
  • 打赏
  • 举报
回复
如果datatable里面数据是正确的,那就是绑定的问题,否则就是数据问题
  • 打赏
  • 举报
回复

  public static DataTable intypeTable(string dateYear)
        {
            DataTable inDt = new DataTable();
            DataColumn dc = new DataColumn("categoryname",typeof(string));
            inDt.Columns.Add(dc);
            DataColumn month1 = new DataColumn("month1", typeof(decimal));
            inDt.Columns.Add(month1);
            DataColumn month2 = new DataColumn("month2", typeof(decimal));
            inDt.Columns.Add(month2);
            DataColumn month3 = new DataColumn("month3", typeof(decimal));
            inDt.Columns.Add(month3);
            DataColumn month4 = new DataColumn("month4", typeof(decimal));
            inDt.Columns.Add(month4);
            DataColumn month5 = new DataColumn("month5", typeof(decimal));
            inDt.Columns.Add(month5);
            DataColumn month6 = new DataColumn("month6", typeof(decimal));
            inDt.Columns.Add(month6);
            DataColumn month7 = new DataColumn("month7", typeof(decimal));
            inDt.Columns.Add(month7);
            DataColumn month8 = new DataColumn("month8", typeof(decimal));
            inDt.Columns.Add(month8);
            DataColumn month9 = new DataColumn("month9", typeof(decimal));
            inDt.Columns.Add(month9);
            DataColumn month10 = new DataColumn("month10", typeof(decimal));
            inDt.Columns.Add(month10);
            DataColumn month11 = new DataColumn("month11", typeof(decimal));
            inDt.Columns.Add(month11);
            DataColumn month12 = new DataColumn("month12", typeof(decimal));
            inDt.Columns.Add(month12);
            //
            PutopJxc.Entity.v_Wastebook_Type1[] type1 = PutopJxc.Da.M_Statistics.SelectType1("dtyear=" + dateYear);
            DataRow dr;
            decimal[] insum = new decimal[12];
            for (int i = 0; i < type1.Length;i++ )
            {
                dr = inDt.NewRow();
                if(i == 0)
                {
                    dr[0] = type1[i].categoryname;
                    dr[type1[i].dtmonth] = type1[i].amount.ToString("n2");
                    
                    inDt.Rows.Add(dr);
                }
                else
                {
                    int index = -1;
                    for(int j =0;j<inDt.Rows.Count;j++)
                    {
                        if(type1[i].categoryname == inDt.Rows[j][0].ToString())
                        {
                            index = j;
                            break;
                        }
                    }
                    if (index != -1)
                    {
                        inDt.Rows[index][type1[i].dtmonth] = type1[i].amount.ToString("n2");
                    }
                    else
                    {
                        dr[0] = type1[i].categoryname;
                        dr[type1[i].dtmonth] = type1[i].amount.ToString("n2");
                        inDt.Rows.Add(dr);
                    }
                }
                insum[type1[i].dtmonth-1] += type1[i].amount; 
            }
            //添加小计行
            DataRow sumDr = inDt.NewRow();
            sumDr[0] = "收入小计";
            for (int i = 1; i < insum.Length;i++ )
            {
                sumDr[i] = insum[i - 1].ToString("n2");
            }
            inDt.Rows.Add(sumDr);
            //
            //填充空的单元格
            for (int i = 0; i < inDt.Rows.Count;i++ )
            {
                for (int j = 1; j < inDt.Columns.Count;j++ )
                {
                    if (String.IsNullOrEmpty(inDt.Rows[i][j].ToString()))
                    {
                        inDt.Rows[i][j] = "0.00";
                    }
                }
            }
            return inDt;
        }


   public static DataTable outtypeTable(string dateYear)
        {
            DataTable outDt = new DataTable();
            DataColumn dc = new DataColumn("categoryname", typeof(string));
            outDt.Columns.Add(dc);
            DataColumn month1 = new DataColumn("month1", typeof(decimal));
            outDt.Columns.Add(month1);
            DataColumn month2 = new DataColumn("month2", typeof(decimal));
            outDt.Columns.Add(month2);
            DataColumn month3 = new DataColumn("month3", typeof(decimal));
            outDt.Columns.Add(month3);
            DataColumn month4 = new DataColumn("month4", typeof(decimal));
            outDt.Columns.Add(month4);
            DataColumn month5 = new DataColumn("month5", typeof(decimal));
            outDt.Columns.Add(month5);
            DataColumn month6 = new DataColumn("month6", typeof(decimal));
            outDt.Columns.Add(month6);
            DataColumn month7 = new DataColumn("month7", typeof(decimal));
            outDt.Columns.Add(month7);
            DataColumn month8 = new DataColumn("month8", typeof(decimal));
            outDt.Columns.Add(month8);
            DataColumn month9 = new DataColumn("month9", typeof(decimal));
            outDt.Columns.Add(month9);
            DataColumn month10 = new DataColumn("month10", typeof(decimal));
            outDt.Columns.Add(month10);
            DataColumn month11 = new DataColumn("month11", typeof(decimal));
            outDt.Columns.Add(month11);
            DataColumn month12 = new DataColumn("month12", typeof(decimal));
            outDt.Columns.Add(month12);
            //
            PutopJxc.Entity.v_Wastebook_Type2[] type2 = PutopJxc.Da.M_Statistics.SelectType2("dtyear=" + dateYear);
            DataRow dr;
            decimal[] outSum = new decimal[12];
            for (int i = 0; i < type2.Length; i++)
            {
                dr = outDt.NewRow();
                if(i==0)
                {
                    dr[0] = type2[i].categoryname;
                    dr[type2[i].dtmonth] = type2[i].amount.ToString("n2");
                    outDt.Rows.Add(dr);
                }
                else
                {
                    int index = -1;
                    for (int j = 0; j < outDt.Rows.Count;j++ )
                    {
                        if(type2[i].categoryname == outDt.Rows[j][0].ToString())
                        {
                            index = j;
                            break;
                        }
                    }
                    if (index != -1)
                    {
                        outDt.Rows[index][type2[i].dtmonth] = type2[i].amount.ToString("n2");
                    }
                    else
                    {
                        dr[0] = type2[i].categoryname;
                        dr[type2[i].dtmonth] = type2[i].amount.ToString("n2");
                        outDt.Rows.Add(dr);
                    }
                }
                outSum[type2[i].dtmonth - 1] += type2[i].amount; 
            }
            //添加小计行
            DataRow sumDr = outDt.NewRow();
            sumDr[0] = "支出小计";
            for (int i = 1; i < outSum.Length; i++)
            {
                sumDr[i] = outSum[i - 1].ToString("n2");
            }
            outDt.Rows.Add(sumDr);
            //填充空的单元格
            for (int i = 0; i < outDt.Rows.Count; i++)
            {
                for (int j = 1; j < outDt.Columns.Count; j++)
                {
                    if (String.IsNullOrEmpty(outDt.Rows[i][j].ToString()))
                    {
                        outDt.Rows[i][j] = "0.00";
                    }
                }
            }
            return outDt;
        }

  • 打赏
  • 举报
回复
引用 4 楼 lutaotony 的回复:
[quote=引用 2 楼 jxetv 的回复:] [quote=引用 1 楼 kongwei521 的回复:] for 循环的列数对不对? for (int i = 1; i < gdvIn.Columns.Count;i++ ) 循环了几次 ?
对的 ,Columns.Count其实是12,12个月就12列嘛[/quote] 不会吧,如果是12 应该是11才对吧,还是我看花眼了[/quote] Label i 从Label1,Label2......Label12 都执行了,我设置断点调试看到是到12的
lutaotony 2016-01-14
  • 打赏
  • 举报
回复
引用 2 楼 jxetv 的回复:
[quote=引用 1 楼 kongwei521 的回复:] for 循环的列数对不对? for (int i = 1; i < gdvIn.Columns.Count;i++ ) 循环了几次 ?
对的 ,Columns.Count其实是12,12个月就12列嘛[/quote] 不会吧,如果是12 应该是11才对吧,还是我看花眼了
  • 打赏
  • 举报
回复

为了方便点看,我去了对应绑定的字段切换到视图
  • 打赏
  • 举报
回复
引用 1 楼 kongwei521 的回复:
for 循环的列数对不对? for (int i = 1; i < gdvIn.Columns.Count;i++ ) 循环了几次 ?
对的 ,Columns.Count其实是12,12个月就12列嘛
蝶恋花雨 2016-01-14
  • 打赏
  • 举报
回复
for 循环的列数对不对? for (int i = 1; i < gdvIn.Columns.Count;i++ ) 循环了几次 ?

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧