0

グリッドビューに int 値を追加しようとしています。私のC#コードは次のとおりです。

foreach (GridViewRow r in GridView1.Rows) 
{
      int I = (Convert.ToInt32(r.Cells[5].Text) 
              + Convert.ToInt32(r.Cells[6].Text) 
              + Convert.ToInt32(r.Cells[7].Text) 
              + Convert.ToInt32(r.Cells[8].Text) 
              + Convert.ToInt32(r.Cells[9].Text));
      r.Cells[10].Text = Convert.ToString(I);
}

例外: 「入力文字列の形式が正しくありませんでした」

以前は正常に動作していました。別のシステムに切り替え、データベースを接続し、あちこちにいくつかの変更を加えましたが、現在は機能していません。ページが読み込まれると、グリッドビュー セルには既に値があります。ボタンをクリックするだけで、これらの値を追加(合計)し、同じグリッドビューの別のセルに追加を表示しています。

どんな助けでも感謝します。

4

4 に答える 4

5

各呼び出しに渡された値を確認してください。Convert.ToInt32そのうちの 1 つ以上が に変換できませんint

これを行うには、データベース マネージャーでソースを直接確認するか、コードをステップ実行して行の列と値などを確認します。ただし、修正は同じままで、次の 2 つの形式のいずれかまたは両方を取ります。データ、または気にしないようにコードを修正します(それが許容できる場合)。

int.TryParse後者の目的で興味があるかもしれません。

于 2013-02-26T08:48:45.753 に答える
2

これを試して:

        foreach (GridViewRow r in GridView1.Rows)
        {
            int val1 = 0;
            int val2 = 0;
            int val3 = 0;
            int val4 = 0;
            int val5 = 0;

            int.TryParse(r.Cells[5].Text, out val1);
            int.TryParse(r.Cells[6].Text, out val1);
            int.TryParse(r.Cells[7].Text, out val1);
            int.TryParse(r.Cells[8].Text, out val1);
            int.TryParse(r.Cells[9].Text, out val1);

            int I = (val1 + val2 + val3 + val4 + val5);

            r.Cells[10].Text = I.ToString();
        }

可能であれば、別のデータ型への変換を試みる前に、常に値をテストする必要があります。

于 2013-02-26T08:57:53.250 に答える
0

反復するときは、GridViewRowのRowTypeを確認してください。HeaderRowから値を解析しようとしている可能性があります。あなたはDataRowsにのみ興味があると思います。

また、セルのインデックスを使用してグリッドビューから値を取得しないことを検討することもできます。グリッドビューのレイアウトを変更すると、計算は失敗します。

于 2013-02-26T08:52:16.270 に答える
0

Convert を使用して null 値を意味のある値に変換することはできません。あなたの最善のオプションは、最初に null をチェックしてから、結果に 0 (またはその他) の値を割り当てることです (Convert がその結果を送信した場所でも)。

于 2013-02-26T08:55:05.890 に答える