0

我在我的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()总是包含“”仅此而已...感谢您的帮助

4

5 回答 5

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);
        }
    } 
}
于 2012-05-10T18:09:43.530 回答
0

记住它是一个从零开始的索引,所以 [6] 表示单元格 7

于 2012-05-10T14:48:51.690 回答
0

如果我没记错的话(并且您的标签是单元格中的第一个/唯一控件) -

您需要在索引 0 处请求控件,或者通过 id 找到它,然后请求 .Text

像这样:

GridFactures.Rows[i].Cells[6].Controls[0].Text.ToString()
于 2012-05-10T15:10:30.497 回答
0

我知道为什么。我自己也遇到了同样的情况。您需要检查为空的字段,如果是,请先将其转换为零。

   total += (GridFactures.Rows[i].Cells[6].Text == "")? 0d : Convert.ToDouble(GridFactures.Rows[i].Cells[6].Text.ToString());
于 2012-05-10T17:56:51.913 回答
0

如何使用 LINQ 而不是循环?

double mySum = 
        GridFactures.Rows
                    .Cast<GridViewRows>()
                    .Sum(row =>  
                Double.Parse(((Label)row.FindControl("lblMontantTTC")).Text)); 

如果您没有看到任何值,那么您的网格实际上还没有被数据绑定,或者 ViewState 在网格上被禁用。这一切都取决于您在页面生命周期中执行此计算的位置/时间。

于 2012-05-10T18:02:14.610 回答