2016-08-19 29 views
0

交互の行の色を取得するのに問題があります。私は別の表現を試みたし、これは私がそれを終らに得ているほど近いSSRSグループ内の交互の行の色

私のレポートの他のすべてが正しい代替行のシェーディングを取得している
=IIF(RunningValue(Fields!agent_name.Value,CountDistinct, Nothing) MOD 2 = 1, "Gainsboro", "White") 

、私はトラブルを抱えています result showing using above expression

:行グループと列グループ..約2日間を過ごし、まだ運:(

私は上記の式と私の行を作る、それはこのように表示されていこの特定のレポートで

私行グループは明らかに名前です

列グループは月/年です。

任意の提案/支援が大幅

答えて

2

を理解されるであろう問題は、データがない場合、マトリックスは細胞を作成されたデータにNULLが存在することです。これらのセルにはAgent_Nameが関連付けられていないため、デフォルトでは白です。

SSRSでRunnning ValuesとRow Numbersを使用することを断念し、通常はAlternating Row Color機能を使用します。

レポート(レポートのプロパティ>コード)にいくつかのVBコードを追加します。

Private bOddRow(10) As Boolean 

Function AlternateColor(ByVal OddColor As String, ByVal EvenColor As String, ByVal Toggle As Boolean, ByVal Type AS INTEGER) As String 

    If Toggle Then bOddRow(Type) = Not bOddRow(Type) 

    If bOddRow(Type) Then 
       Return OddColor 
    Else 
       Return EvenColor 
    End If 

End Function 

次に色を移入するために式を使用します。

=code.AlternateColor("AliceBlue", "White", 0, 1) 

最初の二つの引数3番目の引数は色を切り替えるように指示するコントロールであり、4番目の引数はグループがネストされたグループ化に使用されることです。

行の最初の列には、最初のの制御があります。

=code.AlternateColor("AliceBlue", "White", 1, 1) 

あなたの最初の列でこれを使用してください - あなたのエージェント名を持っています。

How to create Alternative Row Background colors in SSRS for values in a group

+0

あなたは爆弾ですが、最初の列がハイライト表示されているこの方法で鉱山を解析しますが、同じグループの詳細は..ではなく、次の行の詳細が影付きで表示されますか?シェーディングが私のグループ内にとどまるように、どのように変更すればよいですか? – user3571153

+0

Nvm。私はそれを持っている..感謝の男..あなたの命を救う! – user3571153

0

Necromancing。
トグルが列グループ内で非常に不規則であるため、受け入れられた回答は私のためには機能しませんでした。

ただし、以下のコードが機能しました。あなたはソートが適用されるため、グループ変数は、動作しませんようにそれを設定

=iif(Code.GetRunningValue() Mod 2 = 0, "WhiteSmoke", "White") 

として

=iif(Code.IncrementRunningValue() Mod 2 = 0, "WhiteSmoke", "White") 

以降のすべての細胞のように最初のセルに背景色を設定する必要が

グループ化の後(値が生成された後に行が再配置されることを意味します)。

Private m_s_count As ULong = 0 

Public Function IncrementRunningValue() As ULong 
    m_s_count = m_s_count + 1UL 

    Return m_s_count - 1UL 
End Function 

Public Function GetRunningValue() As ULong 
    Return m_s_count 
End Function 

それとも、それを行うことができますさらに簡単:

Private m_s_AlternatingColor1Count As ULong = 0 


Private Function ComputeAlternatingColor1(val As ULong) As String 
    If val Mod 2 = 0 Then 
     Return "WhiteSmoke" 
    End If 

    Return "White" 
End Function 


Public Function IncrementAlternatingColor1() As String 
    Dim alternatingColor As String = ComputeAlternatingColor1(m_s_AlternatingColor1Count) 
    m_s_AlternatingColor1Count = m_s_AlternatingColor1Count + 1UL 

    Return alternatingColor 
End Function 

Public Function GetAlternatingColor1() As String 
    Return ComputeAlternatingColor1(m_s_AlternatingColor1Count) 
End Function 

し、最初の行の背景色で:

=Code.IncrementAlternatingColor1() 

およびそれ以降のすべての行背景色:

=Code.GetAlternatingColor1() 

これは、1つの場所(DRY)で色を切り替えることができるという利点があります。

関連する問題