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

یکشنبه 17 اسفند 1393

در این مقاله قصد داریم نحوه نمایش مجموع ستونهای یک کنترل 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

 

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

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

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

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

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