我有一个显示某些值的网格视图。现在我必须计算每行的那些值的行方式总和,然后显示它们。
我试过这段代码,但由于输入字符串格式不正确,我收到错误。
public void gv_RowCreated(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int total = Convert.ToInt32(e.Row.Cells[1].Text) + Convert.ToInt32(e.Row.Cells[2].Text) + Convert.ToInt32(e.Row.Cells[3].Text) + Convert.ToInt32(e.Row.Cells[4].Text) + Convert.ToInt32(e.Row.Cells[5].Text) + Convert.ToInt32(e.Row.Cells[6].Text) + Convert.ToInt32(e.Row.Cells[7].Text);
((Label)gv.FindControl("Label8")).Text = Convert.ToString(total);
}
}
答案 0 :(得分:0)
我假设您要在行中对值进行求和,而不是列中的值(这是更常见的)。
您的网格将绑定到IEnumerable对象列表,这些对象的属性将构成网格的列。
执行此操作的简单方法是在数据对象上再添加一个属性,该属性可以是其他属性的总和 - 因此您具有计算属性。
但是,您可能希望将此属性显示为网格中的最后一列,为了可靠地执行此操作(以非黑客方式),您需要专门声明列,即您必须设置{{ 1}}到假。
修改强>
在查看你的代码后,我不得不说这是一种丑陋的方式(以这种方式处理网格行非常慢)。更好的方法是在计算数据对象中包含计算属性并将计算封装在那里,因为网格仅用于显示,并且不需要了解值本身。这是一个示例数据对象,让您了解我的意思,我将数据类型混淆了一点只是为了使它更复杂一些:
AutoGenerateColumns
答案 1 :(得分:0)
尝试将以下代码设置为Label8的项目模板:
<asp:TemplateField HeaderText="Col8">
<ItemTemplate>
<%# Convert.ToInt32(Eval("col1")) + Convert.ToInt32(Eval("col2")) + ... %>
</ItemTemplate>
</asp:TemplateField>
</asp:TemplateField>
检查它是否正常。
答案 2 :(得分:0)
使用此代码,
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblTotal = (Label)e.Row.FindControl("lblTotal");
int iCount;
if (Decimal.TryParse(lblTotal.Text, iCount) ) {
iCount += iCount;
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
Label lblTotalAmt = (Label)e.Row.FindControl("lblTotalAmt");
lblTotalAmt.Text = iCount.ToString();
}
}