簡體   English   中英

將總計添加到網格視圖的頁腳

[英]Add Grand Total To Footer Of Grid View

我正在使用以下語法來操縱gridview的RowDataBoundRowCreated方法,以便每次更改employeeid以添加總行。 對我來說很基礎,這很好。 好吧,我現在需要更進一步,並在頁腳中添加所有總行的SUM。

我該如何實現? 以下是每次更改員工編號時用於添加總計的內容:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            GridView1.Columns[14].Visible = false;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                employeeid = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "employeeid").ToString());
                decimal tmpfield1 = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field1").ToString());
                decimal tmpfield2 = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field2").ToString());
                decimal tmpfield3= Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field3").ToString());
                decimal tmpfield4 = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field4”).ToString());
                decimal tmpfield5 = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field5").ToString());
                decimal tmpfield6 = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "field6").ToString());
                qtyfield1 += tmpfield1;
                qtyfield2 += tmpfield2;
                qtyfield3 += tmpfield3
                qtyfield4+= tmpfield4;
                qtyfield5+= tmpfield5;
                qtyfield6 += tmpfield6;
            }
        }
        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            bool newRow = false;
            if ((employeeid > 0) && (DataBinder.Eval(e.Row.DataItem, "employeeid") != null))
            {
                if (employeeid != Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "employeeid").ToString()))
                    newRow = true;
            }
            if ((employeeid > 0) && (DataBinder.Eval(e.Row.DataItem, "employeeid") == null))
            {
                newRow = true;
                rowIndex = 0;
            }
            if (newRow)
            {
                wh = “11”;
                GridView GridView1 = (GridView)sender;
                GridViewRow NewTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);
                NewTotalRow.Font.Bold = true;
                NewTotalRow.BackColor = System.Drawing.Color.Gray;
                NewTotalRow.ForeColor = System.Drawing.Color.White;
                TableCell HeaderCell = new TableCell();
                HeaderCell.Text = "Total";
                HeaderCell.HorizontalAlign = HorizontalAlign.Left;
                HeaderCell.ColumnSpan = 4;
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Right;
                HeaderCell.Text = qtyfield1.ToString();
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Right;
                HeaderCell.Text = qtyfield2.ToString();
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Right;
                HeaderCell.Text = qtyfield3.ToString();
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Center;
                HeaderCell.Text = qtyfield4.ToString();
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Center;
                HeaderCell.Text = qtyfield5.ToString();
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Center;
                decimal grandtotalfield6
                try { grandtotalfield6 = Convert.ToDecimal(qtyfield6) / Convert.ToDecimal(wh); }
                catch { grandtotalfield6 = 0.00M; }
                HeaderCell.Text = grandtotalfield6.ToString("P", CultureInfo.InvariantCulture);
                NewTotalRow.Cells.Add(HeaderCell);
                HeaderCell = new TableCell();
                HeaderCell.HorizontalAlign = HorizontalAlign.Right;
                HeaderCell.Text = "";
                HeaderCell.ColumnSpan = 4;
                NewTotalRow.Cells.Add(HeaderCell);
                GridView1.Controls[0].Controls.AddAt(e.Row.RowIndex + rowIndex, NewTotalRow);
                rowIndex++;
                qtyTotal = 0;
                qtyfield1 = 0;
                qtyfield2 = 0;
                qtyfield3 = 0;
                qtyfield4 = 0;
                qtyfield5 = 0;
                qtyfield6 = 0;
            }
        }

編輯
經過進一步的思考和分析,我認為我可以通過這樣做來獲取總計,但是我將如何將其轉過來並將此信息寫入頁腳?

sumf1 += qtyfield1;
sumf2 += qtyfield2;
sumf3 += qtyfield3;
sumf4 += qtyfield4;
sumf5 += qtyfield5;
sumf6 += qtyfield6;

為什么不使用選項GridView1.Rows.Count?

GridView1.FooterRow.Cells[2].Text = Convert.ToString(GridView1.Rows.Count);

如果我對您的理解很好,那么他將從x行開始“將金額保存在隱藏字段中”

然后,每添加一行,就從總行中減去該行,結果將是為該人添加的總行,然后將該值設置為頁腳單元格

你快到了。 在您的RowDataBound代碼中,添加檢查以確定您是在查看DataRow還是Footer您將如何操作(如下所示)(當然要添加要顯示的所有數量,但是應該進行快速文本更改) ,因為語法將保持不變)

這是您的C#代碼背后

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
           //Process like you do in your method
        }
        if (e.Row.RowType == DataControlRowType.Footer)
        {
            Label lblSum1 = (Label)e.Row.FindControl("lblTotalqty");
            lblSum1.Text = Sum1.ToString();
        }
    }

修改HTML以添加footertemplate並像這樣填充

<FooterTemplate>
  <div style="text-align: right;">
    <asp:Label ID="lblSum1" runat="server" />
  </div>
</FooterTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM