我在gridview中获取特定单元格的数据时遇到问题 我是这样做的:
double total = 0;
for (int i = 0; i < GridFactures.Rows.Count; i++)
total += Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString());
lblTotalTTC.Text = "Montant total TTC : " + total;
有问题的列在我的aspx文件中声明:
<asp:TemplateField HeaderText="Montant TTC">
<ItemTemplate>
<asp:Label ID="lblMontantTTC" runat="server" Text='<%#Eval("MontantTTC") %>'/>
</ItemTemplate>
</asp:TemplateField>
我确信这总是我要检查的第六列。
我休息一下,GridFactures.Rows[i].Cells[6].Text.ToString()
总是包含“”
仅此而已......
谢谢你的帮助
答案 0 :(得分:1)
而不是这段代码:
for (int i = 0; i < GridFactures.Rows.Count; i++)
total += Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString());
试试这个:
for (int i = 0; i < GridFactures.Rows.Count; i++)
{
Control ctrl = GridFactures.Rows[i].Cells[6].FindControl("lblMontantTTC");
if (ctrl != null)
{
Label lbl = ctrl as Label;
if (lbl != null)
{
total += Convert.ToDouble(lbl.Text);
}
}
}
答案 1 :(得分:0)
记住它是基于零的索引,因此[6]表示单元格7
答案 2 :(得分:0)
如果我没弄错(并且你的标签是单元格中的第一个/唯一控件) -
你需要在索引0处询问控件,或者通过id找到它,然后请求.Text
像这样:
GridFactures.Rows[i].Cells[6].Controls[0].Text.ToString()
答案 3 :(得分:0)
我知道为什么。我自己也碰到了同样的情况。您需要检查空的字段,如果是,请先将其转换为零。
total += (GridFactures.Rows[i].Cells[6].Text == "")? 0d : Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString());
答案 4 :(得分:0)
如何使用LINQ而不是循环?
double mySum =
GridFactures.Rows
.Cast<GridViewRows>()
.Sum(row =>
Double.Parse(((Label)row.FindControl("lblMontantTTC")).Text));
如果您没有看到任何值,那么您的网格实际上还没有数据绑定,或者网格上禁用了ViewState。这一切都取决于您在页面生命周期中执行此计算的位置/时间。