0

私はこのコードを持っていて、ケース0〜7がすべてゼロである行を削除しようとしています。forループを実行するか、if-thenを使用する方が良いですか?:

tmpEditRow.BeginEdit()

            Select Case a
                Case 0
                    tmpEditRow("Qsold / QoH1") = QtySold & " / " & QtyOH
                Case 1
                    tmpEditRow("Qsold / QoH3") = QtySold & " / " & QtyOH
                Case 2
                    tmpEditRow("Qsold / QoH4") = QtySold & " / " & QtyOH
                Case 3
                    tmpEditRow("Qsold / QoH7") = QtySold & " / " & QtyOH
                Case 4
                    tmpEditRow("Qsold / QoH8") = QtySold & " / " & QtyOH
                Case 5
                    tmpEditRow("Qsold / QoH10") = QtySold & " / " & QtyOH
                Case 6
                    tmpEditRow("Qsold / QoH12") = QtySold & " / " & QtyOH
                Case 7
                    tmpEditRow("Qsold / QoH14") = QtySold & " / " & QtyOH
             End Select
                    tmpEditRow.EndEdit()
4

3 に答える 3

2

計算に変数を使用してから、0の値を確認してみませんか

更新: QtyOHが各ケースの現在の値である場合a、さらに単純化されます。

If QtyOH <> 0 Then
    tmpEditRow.BeginEdit()

    Dim bucket as String = ""
    Select Case a
        Case 0
            bucket = "1"
        Case 1
            bucket = "3"
        Case 2
            bucket = "4"
        .
        .
        .
    End Select

    tmpEditRow("Qsold / QoH" & bucket) = QtySold & " / " & QtyOH
    tmpEditRow.EndEdit()
End If
于 2012-12-27T20:39:11.357 に答える
0

使用しSelect Caseても大丈夫です。ただし、読みやすさとメンテナンスのために、可能な限り実際の計算を単一のブロック内に統合できるようにコードを編成することをお勧めします(パフォーマンス/最適化/リソースの問題が別の方法で必要な場合を除く)。

tmpEditRow.BeginEdit()

' Note: Assuming variables [QtySold] and [QtyOH] are numeric
' values, each set appropriately for whatever variable
' [a] is meant to indicate.

' [ColKey] is the column of interest within [tmpEditRow], as
' appropriate per [a].
Dim ColKey As String = Nothing
Select Case a
    Case 0: ColKey = "Qsold / QoH1"
    Case 1: ColKey = "Qsold / QoH3"
    Case 2: ColKey = "Qsold / QoH4"
    Case 3: ColKey = "Qsold / QoH7"
    Case 4: ColKey = "Qsold / QoH8"
    Case 5: ColKey = "Qsold / QoH10"
    Case 6: ColKey = "Qsold / QoH12"
    Case 7: ColKey = "Qsold / QoH14"
End Select

' The actual computation, right here, via [ColValue].
' [ColValue] is the text to place at [ColKey] of [tmpEditRow].
Dim ColValue As String = Nothing
If QtyOH = 0 Then
    ColValue = ""
Else
    ColValue = QtySold & " / " & QtyOH
End If    
tmpEditRow(ColKey) = ColValue

tmpEditRow.EndEdit()
于 2012-12-27T21:27:02.470 に答える
-1

これを次のようなものに凝縮することができます

if ( a == 0 )
    tmpEditRow("Qsold / QoH1") = QtySold & " / " & QtyOH
else if ( a == 1 )
    tmpEditRow("Qsold / QoH3") = QtySold & " / " & QtyOH    
else if ( a == 3 )
    tmpEditRow("Qsold / QoH7") = QtySold & " / " & QtyOH
else if (a == "2|[5-7]") //regex comparison
    tmpEditRow("Qsold / QoH" + (a*2) ) = QtySold & " / " & QtyOH
else
    tmpEditRow.EndEdit()

編集

「QoH_」の部分が2倍して作成されていないことに気づきました。いずれにせよ、if/elseブロックを使用してこれを行うことができます。

于 2012-12-27T20:36:27.470 に答える