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

چهارشنبه 4 شهریور 1394

در این پست نشان خواهیم داد که چگونه در یک 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();
                }
            }
        } 
    }
}

 

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

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

 

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

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید