1

次のコードは、グリッドビューの行データ バインド イベントです。通貨としてのセル テキストの書式設定以外のすべてに対して機能します。実際、通貨をフォーマットするコード行により、コードがエラーになります。FormatCurrency 行をコメントアウトすると、コードは正常に動作します。なぜその行はa)です。セルのテキストをフォーマットしない、および b)。エラーの原因は?

    Protected Sub gvDataRetrieval_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles gvDataRetrieval.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim dateindex As Integer = GetColumnIndexByHeaderText(gvDataRetrieval, "date")
        e.Row.Cells(dateindex).Text = Split(e.Row.Cells(dateindex).Text, " ")(0)
        For i As Integer = 0 To e.Row.Cells.Count - 1
            e.Row.Cells(i).Font.Size = 10
            e.Row.Cells(i).HorizontalAlign = HorizontalAlign.Center
            If i > dateindex Then
                If Convert.ToDecimal(e.Row.Cells(i).Text) < 0 Then
                    e.Row.Cells(i).ForeColor = Drawing.Color.Red
                Else
                    e.Row.Cells(i).ForeColor = Drawing.Color.Black
                End If
            End If
            e.Row.Cells(i).Text = FormatCurrency(e.Row.Cells(i).Text, 0)
        Next
    End If

End Sub
4

4 に答える 4

4

使ってみて

e.Row.Cells(i).Text = Convert.ToDecimal(e.Row.Cells(i).Text).ToString("c0")

それ以外の

e.Row.Cells(i).Text = Format(e.Row.Cells(i).Text, "c0").ToString()
于 2012-06-04T00:13:40.710 に答える
2

他の誰かが上で言ったように、数値以外の値を通貨としてフォーマットしようとすると、コードはエラーになりますが、そうしていないように思えます。

代わりに、特定の列を通貨として書式設定する場合は、列の DataFormatString プロパティを次のように使用します。

<asp:BoundColumn DataField="YourCurrencyField" DataFormatString="{0:C}" />

明らかに、フィールドが通貨としてフォーマットできる有効な数値であることを確認する必要があります。

于 2012-06-04T00:20:18.703 に答える
0

私はC#で同じ問題を抱えていましたが、最初にテキストをダブルに変換してから、ダブルを文字列としてフォーマットすることで解決しました。

これは C# ではなく VB であることはわかっていますが、Google の結果に表示されたソリューションを共有し、誰かを助けることができると思いました。

double d;
Double.TryParse(r.Cells[i].Text, out d);
e.Cells[i].Text = String.Format("{0:C0}", d).ToString();
于 2014-11-13T06:03:53.853 に答える
0

動く

 e.Row.Cells(i).Text = Format(e.Row.Cells(i).Text, "c0").ToString()

If関数に。その行は、日付列であるかどうかをチェックしていませんでした。おそらく日付を通貨に変換しようとしています

        If i > dateindex Then
            If Convert.ToDecimal(e.Row.Cells(i).Text) < 0 Then
                e.Row.Cells(i).ForeColor = Drawing.Color.Red
            Else
                e.Row.Cells(i).ForeColor = Drawing.Color.Black
            End If
            e.Row.Cells(i).Text = Format(e.Row.Cells(i).Text, "c0").ToString()
        End If
于 2012-06-03T23:59:36.383 に答える