نمایش مجموع کل ستونها در کنترل GridView در Asp.NET با استفاده از دستورات #C یا VB.NET

در این مقاله قصد داریم نحوه نمایش مجموع ستونهای یک کنترل GridView را با استفده از دستورات #C و VB.NET شرح دهیم . مجموع ستون خاصی را در GridView در هر صفحه به صورت جداگانه به عنوان جمع کل نمایش می دهیم .

نمایش مجموع کل ستونها در کنترل GridView در Asp.NET با استفاده از دستورات #C یا VB.NET

ابتدا یک پروژه در ویژوال استودیو می سازیم , سپس تگ مربوط به کنترل GridView را در صفحه قرار می دهیم .برای نمایش footer کنترل باید خاصیت ShowFooter را True می کنیم و همچنین برای نمایش صفحه بندی رویداد OnPageIndexChanging را فراخوانی می کنیم , مانند کد زیر :

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowPaging="true"
OnPageIndexChanging="OnPageIndexChanging" ShowFooter="true">
<Columns>
    <asp:BoundField DataField="OrderID" HeaderText="Order ID" ItemStyle-Width="60" />
    <asp:BoundField DataField="ProductName" HeaderText="Product Name" ItemStyle-Width="210" />
    <asp:BoundField DataField="Price" HeaderText="Price" ItemStyle-Width="60" DataFormatString="{0:N2}"
        ItemStyle-HorizontalAlign="Right" />
</Columns>
</asp:GridView>

همچنین به فضای نامهای زیر احتیاج داریم

در #C :

using System.Linq;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

در VB.NET :

Imports System.Linq
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient

اتصال GridView و محاسبه مجموع ستون :

GridViewfh به همراه اطلاعات خود در متد Load صفحه قرار دارد . Query اطلاعات را از جداول Orders  ,  Product و قیمت مربوط به آن محصول می گیرد .مجموع قیمت محصولات محاسبه و در یک Cell در انتای کنترل GridView به نمایش در می آید .

#C :

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string query = "SELECT TOP 30 OrderID,";
    query += "(SELECT ProductName FROM Products WHERE ProductID = details.ProductId) ProductName,";
    query += "(Quantity * UnitPrice) Price";
    query += " FROM [Order Details] details";
    query += " ORDER BY OrderID";
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
 
                    //Calculate Sum and display in Footer Row
                    decimal total = dt.AsEnumerable().Sum(row => row.Field<decimal>("Price"));
                    GridView1.FooterRow.Cells[1].Text = "Total";
                    GridView1.FooterRow.Cells[1].HorizontalAlign = HorizontalAlign.Right;
                    GridView1.FooterRow.Cells[2].Text = total.ToString("N2");
                }
            }
        }
    }
}

VB.NET :


Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Me.BindGrid()
    End If
End Sub
 
Private Sub BindGrid()
    Dim query As String = "SELECT TOP 30 OrderID,"
    query += "(SELECT ProductName FROM Products WHERE ProductID = details.ProductId) ProductName,"
    query += "(Quantity * UnitPrice) Price"
    query += " FROM [Order Details] details"
    query += " ORDER BY OrderID"
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand(query)
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As New DataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
 
                    'Calculate Sum and display in Footer Row
                    Dim total As Decimal = dt.AsEnumerable().Sum(Function(row) row.Field(Of Decimal)("Price"))
                    GridView1.FooterRow.Cells(1).Text = "Total"
                    GridView1.FooterRow.Cells(1).HorizontalAlign = HorizontalAlign.Right
                    GridView1.FooterRow.Cells(2).Text = total.ToString("N2")
                End Using
            End Using
        End Using
    End Using
End Sub

نحوه استفاده از صفحه بندی کنترل GridView

کد مربوط به #C :


protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    this.BindGrid();
}

کد مربوط به VB.NET :


Protected Sub OnPageIndexChanging(sender As Object, e As GridViewPageEventArgs)
    GridView1.PageIndex = e.NewPageIndex
    Me.BindGrid()
End Sub

 

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