如果GridView Paging设置为“True”,如何获取所有列的总数?

时间:2015-03-09 16:11:51

标签: asp.net gridview

此代码显示网格视图页脚每页中的列总数我想显示所有页面页脚中所有列的总数

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string deb = ((Label)e.Row.FindControl("debit")).Text;
        string cred = ((Label)e.Row.FindControl("credit")).Text;

        decimal totalvalue = Convert.ToDecimal(deb) - Convert.ToDecimal(cred);

        amount += totalvalue;

        Label lbl = (Label)e.Row.FindControl("lblTotal");
        lbl.Text = amount.ToString();

        Label lblDebAmount = (Label)e.Row.FindControl("debit");
        Label lblCredamount = (Label)e.Row.FindControl("credit");

        float debtotal = (float)Decimal.Parse(lblDebAmount.Text);
        float credtotal = (float)Decimal.Parse(lblCredamount.Text);
        totalPriced += debtotal;
        totalPricec += credtotal;

        }
        if (e.Row.RowType == DataControlRowType.Footer)
        {
            Label totallblCAmount = (Label)e.Row.FindControl("totallblDebAmount");
            Label totallblCredAmount = (Label)e.Row.FindControl("totallblCredAmount");
            totallblCAmount.Text = totalPriced.ToString("###,###.000");
           totallblCredAmount.Text = totalPricec.ToString("###,###.000");

        }
    }

1 个答案:

答案 0 :(得分:0)

为什么行是数据绑定的呢?最初绑定数据时为什么不这样做?

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        DataTable dt = Database.GetData();
        GridView1.DataSource = dt;
        GridView1.DataBind();
        //calculate here by manually adding up the debit/credit column from dt
        //or do a separate database call that calculates the sum, ex: select sum(debits), sum(credits) from general_ledger
    }
}

让数据库为您进行数学计算是有意义的。您不需要编写自己的自定义计算代码。只需让数据库的sum函数处理它。


这里有一些细节。

//Executes a SqlCommand and returns a DataTable
public class GetDataTable(SqlCommand command)
{
    var dt = new DataTable();
    using (var connection = new SqlConnection("connectionstring"))
    {
        command.Connection = connection;
        connection.Open();
        dt.Load(command.ExecuteReader());
    }
    return dt;
}

//Executes a SqlCommand and returns a scalar of type T
public static T GetScalar<T>(SqlCommand command)
{
    using (var connection = new SqlConnection ("connectionstring"))
    {
        command.Connection = connection;
        connection.Open();
        var result = command.ExecuteScalar();
        if (result is T)
        {
            return (T)result;
        }
        else
        {
            return (T)Convert.ChangeType(result, typeof(T));
        }
    }
}

//Load the data into the GridView, then get the credit amount and put the value in a label.
//You'll need to adjust the queries to match your schema
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        var tableCommand = new SqlCommand("select columns from table");
        GridView1.DataSource = GetDataTable(tableCommand);
        GridView1.DataBind();
        var creditCommand = new SqlCommand("select sum(stat_amount) from tablename where stat_flag='c'");
        var credits = GetScalar<decimal>(creditCommand);
        Label1.Text = credits;        
    }
}