无法在GridView页脚中添加列的总和。GridView单元格编号为9,我希望在页脚中显示总和。我乘以价格与数量,并显示在'ItemTotal'列,这是工作。
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# ((Convert.ToInt32(Eval("Price")))*(Convert.ToInt32(Eval("Quantity"))))%>'>></asp:Label>
</ItemTemplate>
字符串
我的代码如下所示
方法一
我已经创建了一个方法来添加列值仍然没有得到计算。
private void calculateSum()
{
int grandtotal = 0;
foreach (GridViewRow row in GridView1.Rows)
{
string cellValue = row.Cells[9].Text;
int parsedValue;
if (int.TryParse(cellValue, out parsedValue))
{
grandtotal += parsedValue;
}
}
GridView1.FooterRow.Cells[9].Text = grandtotal.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
calculateSum();
}
的数据
enter image description here
我也试过方法2但收到错误信息
private void calculateSum()
{
Int32 grandtotal = 0;
foreach (GridViewRow row in GridView1.Rows)
{
grandtotal = grandtotal + Convert.ToInt32(row.Cells[9].Text);
}
GridView1.FooterRow.Cells[9].Text = grandtotal.ToString();
}
型
接收错误信息:输入字符串的格式不正确。enter image description here
结论:在方法1中,我没有得到任何错误,但在方法2中。我需要在GridView中添加列的总和列9页脚
我应该使用哪种方法以及在这里修复什么。
如果你能帮我找到正确的密码我会很感激的
2条答案
按热度按时间cgyqldqp1#
好的,问题是模板化列在GridView单元格集合中不以“.text”值存在。
因此,尽管cells集合将存在,但对于任何模板化控件,您都不能使用cells集合(.text)来获取该值。
那么,网格视图中的典型设计模式(假设模板化列中有一些标签)是什么呢?
你可以像这样使用find控件:
字符串
因此,对数据字段列使用cells[],对模板化列使用上述“find control”。
然而,我经常发现最好是汇总数据源,而不是尝试将数据的UI显示用作某些数据库。一个“大”的原因是,你经常有格式化的数字,如货币,或任何东西。这意味着显示带有$或货币符号的数据会导致混乱的转换问题。
因此,尝试根据GridView的DATA生成总计,而不要使用GridView的“UI”显示。
所以,这个例子网格:
型
我们要加载的代码是这样的:
型
结果是这样的:
x1c 0d1x的数据
现在,即使您不采用上述合计数据的“概念”,也会导致我将列数据自由地显示为格式化的货币值?(这一点都不好!!).
您仍然使用每行的.findcontrol,因为要设置或获取的值当然不是cells[]值,而是模板化的列,这需要使用给定行的.FindControl方法。
注意上面使用的第二个技巧。很少有人意识到可以在加载数据表后添加其他列,并且这些列可以具有计算值表达式。因此,我不必运行代码来乘以每行总数的夜数x夜率。
因此,如果可能的话,尝试处理您提供给GridView的数据,而不是处理GridView的“UI”呈现,因为通常情况下,诸如“”之类的东西或诸如此类呈现的HTML标记的货币格式之类的东西会使合计HTML数据变得相当困难。
zwghvu4y2#
它需要确保9是正确的索引值。请检查您的代码:
字符串
在评论中提供反馈。