如何在gridview列中查找总数

时间:2011-01-15 21:57:53

标签: asp.net

我希望您对我的代码有所帮助。 我写了这个源代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowLand.aspx.cs" Inherits="ShowLand" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body MS_POSITIONING="GridLayout" bgColor="#FFF8DC" aLink="#330066">
    <form id="form1" runat="server">
 <asp:Label id="Label6" 
        style="Z-INDEX: 101; LEFT: 176px; POSITION: absolute; TOP: 8px; text-align: center;" runat="server"
                Font-Size="X-Large" Font-Italic="True" Font-Underline="True" Width="608px" ForeColor="Navy"
                Font-Bold="True">Land For Sale</asp:Label>
    <br />
    <br />
    <br />
<div>
        <asp:GridView ID="gridView1" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkSelect" runat="server" />
                        <asp:HiddenField ID="hdValue" runat="server" Value='<%#Eval("ID") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
    </div>
    <div>
        <asp:Button ID="btnMove" runat="server" Text="Add To Cart" OnClick="btnMove_Click" />
    </div>
    <div>

        <asp:GridView ID="gridView2" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
        <asp:TemplateField HeaderText="Qty">
            <ItemTemplate>
            <asp:TextBox ID="tbQty" runat="server" Width="25px"
            MaxLength="3" />
            </ItemTemplate>
            <ItemStyle Width="25px" HorizontalAlign="Center"/>
        </asp:TemplateField>
        </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
    </div>
    <br />
    <br />
    <br />
    </form>
</body>

</html>

我还在ShowLand.aspx.cs

中创建了这样的2个网格视图
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class ShowLand : System.Web.UI.Page
{
    const string key = "MyDataSource3";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }

    }
    private void BindGridView()
    {
        if (Session[key] == null)
        {
            gridView1.DataSource = GetDataSource();
            gridView1.DataBind();
        }
        else
        {
            gridView1.DataSource = (DataTable)Session[key];
            gridView1.DataBind();
        }

    }
    protected DataTable GetDataSource()
    {
        try
        {
            DataTable dt = new DataTable();
            dt = new DataTable();
            dt.Columns.Add("ID", typeof(int)).AutoIncrement = true;
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Price(Grouch)/Hectares", typeof(float));
            DataColumn[] keys = new DataColumn[2];
            keys[0] = dt.Columns["ID"];
            dt.PrimaryKey = keys;
            dt.Rows.Add("1", "Seaside Location", 1.5);
            dt.Rows.Add("2", "Arable Land", 0.1);
            dt.Rows.Add("3", "Foothills of the mountains", 1.5);
            dt.Rows.Add("4", "Industrial Land", 0.1);
            dt.Rows.Add("5", "Rolling Farmland", 0.5);
            Session[key] = dt;
            return dt;

        }
        catch
        {
            return null;
        }
    }
    protected void btnMove_Click(object sender, EventArgs e)
    {
        try
        {
            DataTable dtMain = Session[key] as DataTable;
            //copy the schema of source table
            DataTable dtClone = dtMain.Clone();
            foreach (GridViewRow gv in gridView1.Rows)
            {
                CheckBox chk = gv.FindControl("chkSelect") as CheckBox;
                HiddenField hdValue = gv.FindControl("hdValue") as HiddenField;
                if (chk.Checked)
                {
                    //get only the rows you want
                    DataRow[] results = dtMain.Select("ID=" + hdValue.Value + "");
                    //populate new destination table
                    foreach (DataRow dr in results)
                    {
                        dtClone.ImportRow(dr);
                    }
                }
                gridView2.DataSource = dtClone;
                gridView2.DataBind();
            }
        }
        catch
        {
            BindGridView();
        }

    }
}

在此代码中,用户可以选择他选择的复选框,并使用按钮在第二个gridview中添加此选项。在文本框中也可以给出数量。 我想找到一种方法如何将数量乘以价格列。我该怎么做?

2 个答案:

答案 0 :(得分:0)

在循环浏览gridview时,您可以访问该行及其单元格。所以来自各个单元的数量和价格的价值并进行计算,例如gv.Cells [2]。文本

请检查:Calculate Price Total

顺便说一下,我刚看到你的代码而没有看到数量列?

答案 1 :(得分:0)

最好从DataTable计算你绑定gridview的地方的总数

       datatable.Compute("Sum(ColumnName)","")

因为我们不需要在这里使用for循环,所以这里保存了很多时间。