0

グリッドビューで特定のセルのデータを取得するのに問題があります。この方法でやっています:

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>

これは常にチェックしたい6番目の列だと確信しています。私は休憩を入れ、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

ループする代わりにLINQを使用するのはどうですか?

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

値が表示されない場合は、グリッドが実際にはまだデータバインドされていないか、グリッドでViewStateが無効になっています。これはすべて、ページのライフサイクルのどこで/いつこの計算を実行するかによって異なります。

于 2012-05-10T18:02:14.610 に答える
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

これはゼロベースのインデックスであることを覚えておいてください。したがって、[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 に答える