无法从我的gridview获取数据

时间:2012-05-10 14:47:01

标签: c# asp.net .net gridview

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

5 个答案:

答案 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。这一切都取决于您在页面生命周期中执行此计算的位置/时间。