جمع کل ستون ها و زیرمجموع ستون ها در GridView

در این پست نشان خواهیم داد که چگونه در یک GridView جمع مقادیر تمام ستون ها و ستون های هر صفحه را به صورت جداگانه بدست آوریم.

جمع کل ستون ها و زیرمجموع ستون ها در GridView

مرحله اول: بانک اطلاعاتی

ابتدا یک جدول مانند زیر در بانک اطلاعاتی ایجاد کنید.

درون جدول، داده وارد کرده و آن را پر کنید.

مرحله دوم: Visual Studio

در برنامه Visual Studio یک پروژه جدید ایجاد کنید. در Solution Explorer روی نام پروژه راست کلیک کرده و یک WebForm اضافه کنید.

مرحله سوم: طراحی رابط کاربری

در بخش طرارحی، یک gridview به صفحه اضافه کنید تا بتوانیم داده های درون جدول را در صفحه وب نشان دهیم.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Gridviewsum.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body dir="rtl">
    <form id="form1" runat="server">
    <h2 style="color: #00CC00">Gridview Column Total and Sub Total</h2>  
    <div>  
        <asp:GridView ID="GridItem" runat="server" Width="100%"   
                AutoGenerateColumns="False"  
                RowStyle-HorizontalAlign="Center"   
                ShowFooter="True" AllowPaging="True" PageSize="5" OnPageIndexChanging="GridItem_PageIndexChanging" OnRowDataBound="GridItem_RowDataBound"   
                BackColor ="White" BorderColor="#CC9966"  BorderWidth="1px" CellPadding="4"  >  
              
                <Columns>  
                    <asp:TemplateField HeaderText="شماره ردیف">  
                        <ItemTemplate><%#Eval("Itemid")%></ItemTemplate>  
                    </asp:TemplateField>  
                      
                    <asp:TemplateField HeaderText="نام کالا">  
                        <ItemTemplate><%#Eval("ItemName")%></ItemTemplate>  
  
                        <FooterTemplate>  
                            <div style="padding:0 0 5px 0"><asp:Label Text="جمع صفحه" runat="server" /></div>  
                            <div><asp:Label Text="جمع کل" runat="server" /></div>  
                        </FooterTemplate>  
  
                    </asp:TemplateField>  
                      
                    <asp:TemplateField HeaderText="قیمت">  
                        <ItemTemplate><asp:Label ID="lblPrice" runat="server" Text='<%#Eval("ItemPrice")%>'>  
                            </asp:Label></ItemTemplate>  
  
                        <FooterTemplate>  
                            <div style="padding:0 0 5px 0"><asp:Label ID="lblTotal" runat="server" /></div>  
                            <div><asp:Label ID="lblTotalPrice" runat="server" /></div>  
                        </FooterTemplate>  
  
                    </asp:TemplateField>  
                </Columns>  
                <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />  
                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />  
                <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />  
                <FooterStyle BackColor="#FFFFCC" ForeColor="red" HorizontalAlign="Center" />  
                <RowStyle BackColor="White" ForeColor="#330099" />  
                <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />  
                <SortedAscendingCellStyle BackColor="#FEFCEB" />  
                <SortedAscendingHeaderStyle BackColor="#AF0101" />  
                <SortedDescendingCellStyle BackColor="#F6F0C0" />  
                <SortedDescendingHeaderStyle BackColor="#7E0000" />  
            </asp:GridView>  
    </div>  
    </form>
</body>
</html>

مرحله چهارم: کد 

در این بخش می خواهیم کدهای GridView bind را بنویسیم و دستورات مربوط بهدو خصوصیت PageIndexChanging و RowDataBound را به برنامه اضافه کنیم.

 

همچنین، یک viewstate برای ذخیره کردن مقادیر price اضافه می کنیم.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Gridviewsum
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        string connection = "Data Source=.; Initial Catalog=gridview; User id=sa;password=123;";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindItemList();
            }
        }
        private void BindItemList()
        {
            string Query = "SELECT * FROM Item";
            using (SqlConnection con = new SqlConnection(connection))
            {
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = Query;
                    con.Open();
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(dt);

                    if (ViewState["TotalPrice"] == null)
                    {
                        Decimal Price = 0;
                        for (int i = 0; i <= dt.Rows.Count - 1; i++)
                        {
                            Price += dt.Rows[i].Field<Decimal>(2);
                        }
                        ViewState["TotalPrice"] = Price;
                    }
                    GridItem.DataSource = dt;
                    GridItem.DataBind();
                }
            }
        }
        protected void GridItem_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridItem.PageIndex = e.NewPageIndex;
            BindItemList();
        }
        Decimal Page_Sum;
        protected void GridItem_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Label lblPageTotal = (Label)e.Row.FindControl("lblPrice");
                Page_Sum += Decimal.Parse(lblPageTotal.Text);
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                if (ViewState["TotalPrice"] != null && Page_Sum != 0)
                {
                    Label lblTotal = (Label)e.Row.FindControl("lblTotal");
                    lblTotal.Text = Page_Sum.ToString();

                    Label lblTotalPrice = (Label)e.Row.FindControl("lblTotalPrice");
                    lblTotalPrice.Text = ViewState["TotalPrice"].ToString();
                }
            }
        } 
    }
}

 

مرحله پنجم: مرورگر

اکنون، صفحه شما آماده اجرا می باشد. تصاویر نتایج را می توانید در زیر مشاهده کنید.

 

فایل های ضمیمه