SQL सर्वर रिपोर्टिंग सेवा रिपोर्ट में वैकल्पिक पंक्ति रंग जोड़ें


142

आप SQL सर्वर रिपोर्टिंग सेवा रिपोर्ट में वैकल्पिक पंक्तियों को कैसे शेड करते हैं?


संपादित करें: नीचे सूचीबद्ध अच्छे उत्तरों का एक गुच्छा है - त्वरित और सरल से जटिल और व्यापक तक । काश, मैं केवल एक चुन सकता ...


2
= IIf (रोवनंबर (कुछ नहीं) मॉड 2 = 0, "नो कलर", "# डीडीबीएफ 7")
स्टीफन स्टीगर

यदि आप कई कक्षों का चयन करते हैं, तो आप टेक्स्टबॉक्स गुणों को संपादित नहीं कर सकते, लेकिन आप गुण पैनल में रंग भर सकते हैं और वहां एक अभिव्यक्ति सेट कर सकते हैं!
kitsu.eb

जवाबों:


213

तालिका पंक्ति के BackgroundColor गुण पर जाएं और "अभिव्यक्ति ..." चुनें

इस अभिव्यक्ति का उपयोग करें:

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

इस ट्रिक को रिपोर्ट के कई क्षेत्रों में लागू किया जा सकता है।

और .NET 3.5+ में आप उपयोग कर सकते हैं:

= If(RowNumber(Nothing) Mod 2 = 0, "Silver", "Transparent")

प्रतिनिधि की तलाश में नहीं - मैंने सिर्फ इस सवाल पर शोध किया और सोचा कि मैं साझा करूंगा।


10
यह कुछ परिस्थितियों में विफल रहता है, विशेषकर तालिकाओं और मैट्रिक्स ऑब्जेक्ट्स में बहुत सारे सब-योग हैं। कैच 22 की प्रतिक्रिया की एक ही सीमा नहीं है। इसके अलावा, Catch22 की विधि का उपयोग मैट्रिक्स में स्तंभों को बल देने के लिए किया जा सकता है जिसमें वैकल्पिक स्तंभ रंग होते हैं जो एक नीले चंद्रमा में एक बार उपयोगी होते हैं।
पंजीकृत उपयोगकर्ता

16
मैं हमेशा किसी ऐसे व्यक्ति का उत्थान करना चाहता हूं जो अपने स्वयं के प्रश्न का उत्तर देता है। बहुत बार, पूछने वाला अपने दम पर एक उत्तर पाता है और फिर कभी इसे पोस्ट करने के लिए वापस नहीं आता है, हम में से बाकी लोगों को छोड़कर जो अंधेरे में एक ही सवाल हो सकता है। आपके लिए एक टक्कर, सर।
मैट डायरोलियो

4
जब मैं उपरोक्त कोड का उपयोग करता हूं तो मुझे एक चेतावनी संदेश मिलता है जैसे कि [rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor. ऐसा लगता है कि सही अभिव्यक्ति होगी =IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)। हालांकि टिप के लिए धन्यवाद।
रसेल बी

2
यह समूहीकरण और विवरण देखने के मामले में समस्या देता है

3
कुछ ब्राउज़र "पारदर्शी" या "कुछ भी नहीं" को संभाल नहीं सकते। सर्वश्रेष्ठ शर्त "व्हाइट" का उपयोग करना होगा
नैट एस।

89

IIF (RowNumber ...) का उपयोग करके कुछ मुद्दों को जन्म दे सकता है जब पंक्तियों को समूहीकृत किया जा रहा है और एक अन्य विकल्प रंग निर्धारित करने के लिए एक सरल VBScript फ़ंक्शन का उपयोग करना है।

यह थोड़ा अधिक प्रयास है लेकिन जब मूल समाधान पर्याप्त नहीं होता है, तो यह एक अच्छा विकल्प है।

मूल रूप से, आप रिपोर्ट में कोड इस प्रकार जोड़ें ...

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function

फिर प्रत्येक सेल पर, बैकग्राउण्डर को निम्नानुसार सेट करें:

=Code.AlternateColor("AliceBlue", "White", True)

इस Wrox लेख पर पूरी जानकारी दी गई है


उपरोक्त कोड या तो रिपोर्ट के कोड अनुभाग में या VB.NET प्रोजेक्ट में एक कोड-पीछे पृष्ठ में जोड़ा जाता है, जिसे एक DLL के रूप में संकलित और तैनात किया जाता है, जो एक असेंबली के रूप में संदर्भ है। मैं आपको एक dll के रूप में तैनात करने के लिए अतिरिक्त प्रयास करने की सलाह देता हूं क्योंकि आप आमतौर पर कई रिपोर्टों में इसका संदर्भ देते हैं।
पंजीकृत उपयोगकर्ता

कुछ अन्य हैक करने की कोशिश करने के बाद, समूह की समस्या से निपटने के लिए यह मेरा पसंदीदा तरीका है। जब एक स्तंभ पर इंटरेक्टिव प्रकार लागू किया जाता है तो यह टूटता नहीं है +1 और बहुत धन्यवाद।
रेक्स मिलर

जब आपके पास पंक्तियों की एक विषम संख्या होती है, तो रंग ऑफसेट होते हैं।
के रिचर्ड

20
पहले के बाद पंक्ति में सभी कॉलम के लिए "सही" को "गलत" में बदलना न भूलें, अन्यथा आपको एक बिसात दिखाई देगी! समाधान के लिए धन्यवाद - यह बहुत अच्छा काम करता है!
पीटर मुलरियन

पीटर मुलरियन: मुझे यह समस्या हो रही है, क्या आप बता सकते हैं कि इसे कैसे ठीक किया जाए?
बिल सॉफ्टवेयर इंजीनियर

65

जब मुझे कैच 22 के समाधान का उपयोग किया गया, तो मुझे शतरंज का प्रभाव मिला, मुझे लगता है क्योंकि मेरे मैट्रिक्स के डिजाइन में एक से अधिक कॉलम हैं। वह अभिव्यक्ति मेरे लिए ठीक काम करती है:

=iif(RunningValue(Fields![rowgroupfield].Value.ToString,CountDistinct,Nothing) Mod 2,"Gainsboro", "White")

13
यह उत्तर बहुत अधिक ध्यान देने योग्य है - यह एक स्वच्छ समाधान है जो पंक्ति समूहों और स्तंभ समूहों के साथ मैट्रिक्स में पूरी तरह से काम करता है और काम करने के लिए कोई कस्टम कोड की आवश्यकता नहीं होती है। सुंदर!
स्टीफन मोहर

9
वास्तव में, यह कई कॉलम के लिए भी ठीक काम करता है - लेकिन ऐसा नहीं है यदि आपके पास समूह में "अनुपलब्ध" डेटा है। इसलिए यदि आपके पास डेटा है जिसमें 2007 में 12 महीने का डेटा है, लेकिन 2006 में जनवरी का कोई डेटा नहीं है, और पंक्तियों पर महीने और कॉलम पर वर्ष के आधार पर, 2006 का रंग एक-एक करके बंद हो जाएगा, क्योंकि रनिंगवैल्यू ऑफ़स्किन हो जाता है, हालांकि यहां तक ​​कि अभी भी मैट्रिक्स में एक बॉक्स "जनवरी 2006" के लिए डेटासेट में कोई डेटा नहीं है और रनवैल्यू वही है, कोई रंग नहीं बदलता है, आदि
काइल हेल

2
@ अहद यह इतना करीब है। मैं मुद्दा है जहाँ खाली बक्से विपरीत रंग का उपयोग कर रहा हूँ। मैं यह कैसे सुनिश्चित करूँ कि खाली बक्से ठीक से रंगीन हो जाएँ?
FistOfFury

@KyleHale क्या आपके पास लापता बॉक्स रंग के लिए एक फिक्स है?
FistOfFury

2
@FistOfFury एकमात्र उपाय जो मुझे पता है कि लापता डेटा के लिए एक मान सेट करना (आमतौर पर 0) है।
काइल हेल

20

मैंने @ कैच 22 के समाधान को बदल दिया है क्योंकि मुझे लगता है कि मैं रंगों में से एक को बदलना चाहता हूं तो मुझे प्रत्येक क्षेत्र में जाने का विचार पसंद नहीं है। यह उन रिपोर्टों में विशेष रूप से महत्वपूर्ण है जहां कई क्षेत्र हैं जिन्हें रंग चर को बदलने की आवश्यकता होगी।

'*************************************************************************
' -- Display alternate color banding (defined below) in detail rows
' -- Call from BackgroundColor property of all detail row textboxes
'*************************************************************************
Function AlternateColor(Byval rowNumber as integer) As String
    Dim OddColor As String = "Green"
    Dim EvenColor As String = "White"

    If rowNumber mod 2 = 0 then 
        Return EvenColor
    Else
        Return OddColor
    End If
End Function

ध्यान दिया जाता है कि मैंने फ़ंक्शन को एक से बदल दिया है जो उन रंगों को स्वीकार करता है जिनमें रंगों का उपयोग किया जाना है।

फिर प्रत्येक क्षेत्र में जोड़ें:

=Code.AlternateColor(rownumber(nothing))

यह प्रत्येक क्षेत्र की पृष्ठभूमि के रंग में मैन्युअल रूप से रंग बदलने की तुलना में बहुत अधिक मजबूत है।


1
इस धागे के अलावा अच्छा है! मुझे प्रत्येक कॉलम में "सही" या "गलत" सेट नहीं करना पसंद है। मुझे "mod 3" का विकल्प भी पसंद है, इसलिए मैं केवल हर तीसरी पंक्ति को शेड कर सकता हूं।
बोडाद

मुझे भी यह समाधान पसंद है। हालाँकि, यह मेरे लिए काम नहीं करता है जब मैं पंक्ति समूहन का उपयोग करता हूं। @ ऊपर अहमद के समाधान ने मेरे लिए काम किया।
बोडाद

यदि आप अपने डेटासेट में अतिरिक्त फ़ील्ड जोड़ना नहीं चाहते हैं तो यह एक टैलिक्स का एक बढ़िया समाधान है!
क्लैमचोडा

16

एक बात जिस पर मैंने गौर किया, वह यह कि शीर्ष दो विधियों में से किसी में भी इस बात की कोई धारणा नहीं है कि समूह में पहली पंक्ति किस रंग की होनी चाहिए; समूह पिछले समूह की अंतिम पंक्ति से विपरीत रंग के साथ शुरू होगा। मैं चाहता था कि मेरे समूह हमेशा एक ही रंग से शुरू हों ... प्रत्येक समूह की पहली पंक्ति हमेशा सफेद होनी चाहिए, और अगली पंक्ति रंगीन।

मूल अवधारणा प्रत्येक समूह के शुरू होने पर टॉगल को रीसेट करने की थी, इसलिए मैंने थोड़ा सा कोड जोड़ा:

Private bOddRow As Boolean
'*************************************************************************
' -- Display green-bar type color banding in detail rows
' -- Call from BackGroundColor property of all detail row textboxes
' -- Set Toggle True for first item, False for others.
'*************************************************************************
Function AlternateColor(ByVal OddColor As String, _
         ByVal EvenColor As String, ByVal Toggle As Boolean) As String
    If Toggle Then bOddRow = Not bOddRow
    If bOddRow Then
        Return OddColor
    Else
        Return EvenColor
    End If
End Function
'
Function RestartColor(ByVal OddColor As String) As String
    bOddRow = True
    Return OddColor
End Function

इसलिए मेरे पास अब तीन अलग-अलग प्रकार के सेल बैकग्राउंड हैं:

  1. डेटा पंक्ति के पहले कॉलम में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", ट्रू) (यह पिछले उत्तर के समान ही है।)
  2. डेटा पंक्ति के शेष स्तंभों में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", गलत) (यह भी, पिछले उत्तर के समान है।)
  3. समूहीकरण पंक्ति के पहले स्तंभ में = Code.RestartColor ("ऐलिसबेल्यू") (यह नया है।)
  4. समूह की पंक्ति के शेष स्तंभों में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", गलत) है (यह पहले इस्तेमाल किया गया था, लेकिन समूह पंक्ति के लिए इसका कोई उल्लेख नहीं है।)

यह मेरे लिए काम करता है। यदि आप चाहते हैं कि समूहीकरण पंक्ति गैर-रंगीन हो, या एक अलग रंग हो, तो यह इस बात से बिल्कुल स्पष्ट होना चाहिए कि इसे कैसे बदलना है।

कृपया इस कोड को बेहतर बनाने के लिए क्या किया जा सकता है, इसके बारे में टिप्पणी जोड़ने के लिए स्वतंत्र महसूस करें: मैं SSRS और VB दोनों के लिए बिल्कुल नया हूं, इसलिए मुझे दृढ़ता से संदेह है कि सुधार के लिए बहुत जगह है, लेकिन मूल विचार ध्वनि लगता है (और यह उपयोगी था) मेरे लिए) इसलिए मैं इसे यहां फेंकना चाहता था।


आप इस उत्तर में वर्णित प्रत्येक समूह के लिए पंक्ति क्रमांकन भी रीसेट कर सकते हैं ।
स्टैकऑवरथ्रो

10

समूह हेडर / पाद के लिए:

=iif(RunningValue(*group on field*,CountDistinct,"*parent group name*") Mod 2,"White","AliceBlue")

आप प्रत्येक समूह के भीतर पंक्ति रंग गणना को "रीसेट" करने के लिए भी इसका उपयोग कर सकते हैं। मैं चाहता था कि प्रत्येक उप समूह में पहली विस्तार पंक्ति व्हाइट के साथ शुरू हो और यह समाधान (जब विस्तार पंक्ति पर उपयोग किया जाता है) कि होने की अनुमति दी:

=IIF(RunningValue(Fields![Name].Value, CountDistinct, "NameOfPartnetGroup") Mod 2, "White", "Wheat")

देखें: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx


8

माइकल हरेन का समाधान मेरे लिए ठीक काम करता है। हालाँकि मुझे यह कहते हुए एक चेतावनी मिली कि पूर्वावलोकन के समय "पारदर्शी" एक वैध बैकग्राउंडर नहीं है। SSRS में रिपोर्ट तत्वों के BackgroundColor सेटिंग से एक त्वरित सुधार मिला । "पारदर्शी" के बजाय कुछ भी उपयोग न करें

= IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)

व्हाइट बेहतर होगा तो कुछ भी नहीं।
नैट एस।

6

VB का उपयोग किए बिना इसे हल करने का एकमात्र प्रभावी तरीका पंक्ति समूहन (और स्तंभ समूह के बाहर) के भीतर पंक्ति समूहीकरण modulo मान को "स्टोर" करना है और इसे स्पष्ट रूप से अपने स्तंभ समूह के भीतर संदर्भ दें। मुझे यह समाधान मिला

http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html

लेकिन एनकेट यह बताने का सबसे अच्छा काम नहीं करता है कि क्या हो रहा है, और उसका समाधान एक निरंतर मूल्य पर एक समूहीकरण बनाने के अनावश्यक कदम की सिफारिश करता है, इसलिए यहां एक पंक्ति समूह RowGroup1 के साथ मैट्रिक्स के लिए चरण-दर-चरण प्रक्रिया है:

  1. RowGroup1 के भीतर एक नया कॉलम बनाएँ। RowGroupColor की तरह इस के लिए पाठ बॉक्स का नाम बदलें।
  2. RowGroupColor के टेक्स्टबॉक्स का मान सेट करें

    =iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")

  3. अपनी सभी पंक्ति कक्षों की BackgroundColor गुण सेट करें

    "=ReportItems!RowGroupColor.Value"

  4. RowGroupColor स्तंभ की चौड़ाई को 0pt पर सेट करें और इसे ग्राहकों से छिपाने के लिए CanGrow को झूठा सेट करें।

देखा! यह भी इस धागे में वर्णित समस्याओं का एक बहुत हल करती है:

  • उपसमूहों के लिए स्वचालित रीसेट: बस उस पंक्ति समूह के लिए एक नया कॉलम जोड़ें, जो अपने समूह मूल्यों पर एक RunValue का प्रदर्शन कर रहा है ।
  • True / False टॉगल के बारे में चिंता करने की कोई ज़रूरत नहीं है।
  • आसान संशोधन के लिए केवल एक ही स्थान पर रंग।
  • पंक्ति या स्तंभ समूहों पर परस्पर विनिमय के लिए उपयोग किया जा सकता है (केवल चौड़ाई के बजाय ऊंचाई सेट करें)

यह बहुत बढ़िया होगा अगर SSRS टेक्स्टबॉक्स पर वैल्यू के अलावा प्रॉपर्टीज को एक्सपोज करेगा। आप पंक्ति समूह टेक्स्टबॉक्स के बैकग्राउंडकोलर प्रॉपर्टी में इस तरह की गणना कर सकते हैं और फिर इसे अन्य सभी कक्षों में ReportItems! RowGroup.BackgroundColor के रूप में संदर्भित कर सकते हैं।

आह, हम सपना देख सकते हैं ...


5

मेरी समस्या यह थी कि मैं चाहता था कि सभी कॉलम एक ही पृष्ठभूमि के हों। मैंने पंक्ति और स्तंभ दोनों से समूहीकृत किया, और यहां शीर्ष दो समाधानों के साथ मैंने कॉलम 1 में सभी पंक्तियों को रंगीन पृष्ठभूमि के साथ, स्तंभ 2 में सभी पंक्तियों को एक सफेद पृष्ठभूमि के साथ, कॉलम 3 में सभी पंक्तियों को एक रंगीन पृष्ठभूमि के साथ रखा। , और इसी तरह। यह वैसा ही है जैसे RowNumberऔर bOddRow(कैच 22 के सॉल्यूशन) मेरे कॉलम ग्रुप पर ध्यान देने के बजाय उस पर ध्यान न दें और केवल एक नई पंक्ति के साथ बारी-बारी से करें।

मैं जो चाहता था वह पंक्ति 1 के सभी स्तंभों में एक सफेद पृष्ठभूमि के लिए है, फिर पंक्ति 2 के सभी स्तंभों में रंगीन पृष्ठभूमि है, फिर पंक्ति 3 के सभी स्तंभों में एक सफेद पृष्ठभूमि है, और इसी तरह। मैं चयनित जवाब का उपयोग करके इस आशय मिल गया लेकिन गुजर के बजाय Nothingकरने के लिए RowNumber, मैं अपने स्तंभ समूह, जैसे के नाम से पारित कर दिया

=IIf(RowNumber("MyColumnGroupName") Mod 2 = 0, "AliceBlue", "Transparent")

सोचा कि यह किसी और के लिए उपयोगी हो सकता है।


4

मुझे लगता है कि इस ट्रिक की यहां चर्चा नहीं की गई है। तो यहाँ यह है,

किसी भी प्रकार के जटिल मैट्रिक्स में, जब आप वैकल्पिक सेल रंग चाहते हैं, या तो पंक्तिवार या कॉलम वार, काम करने वाला समाधान है,

यदि आप चाहते हैं कि तब कोलॉम्न वार कोशिकाओं का एक वैकल्पिक रंग हो,

  1. एक रिपोर्ट डिज़ाइन दृश्य के निचले दाएं कोने पर, "कॉलम समूह" में, 1 पर एक नकली पैरेंट समूह बनाएं (अभिव्यक्ति का उपयोग करके), जिसका नाम "फ़ेकपैरेंटग्रुप" है।
  2. फिर, रिपोर्ट डिज़ाइन में, उन कोशिकाओं के लिए जिन्हें वैकल्पिक रूप से रंगीन किया जाना है, पृष्ठभूमि रंग अभिव्यक्ति का उपयोग करें

= IIF (RunningValue (फील्ड्स! [ColumnGroupField] .Value, countDistinct, "FakeParentGroup") MOD 2, "White", "LightGrey")

बस इतना ही।

वैकल्पिक रंग पंक्ति वार के लिए समान, बस आपको तदनुसार समाधान संपादित करना होगा।

नोट: यहां, कभी-कभी आपको अपने अनुसार कोशिकाओं की सीमा निर्धारित करने की आवश्यकता होती है, आमतौर पर यह गायब हो जाता है।

जब आप नकली माता-पिता समूह बनाते हैं तो रिपोर्ट में मान 1 को हटाना न भूलें।


1
यह उत्तर निश्चित रूप से उन लोगों के लिए एक शानदार खोज है, जिन्हें जटिल टैबलिक्स में पंक्ति बैंडिंग का निर्माण करना है! यदि कोई मौजूदा मूल समूह है, तो उसका उपयोग करें। अन्यथा, FakeParentGroup बनाएं। टैबलिक्स में गुम मान जिसमें स्तंभ और पंक्ति समूह दोनों होते हैं, आमतौर पर स्वरूपण को बंद कर देते हैं। मेरा उत्तर देखें जो पहली सेल में लापता मूल्यों के लिए @ आदित्य के खाते पर बनाता है।
rpyzh

2

यदि पूरी रिपोर्ट के लिए आपको एक वैकल्पिक रंग की आवश्यकता होती है, तो आप डेटासेट का उपयोग कर सकते हैं आपका टैबलिक्स रिपोर्ट पर एक रिपोर्ट-व्यापी पहचान पंक्ति के लिए बाध्य है और रोवनम्बर फ़ंक्शन में इसका उपयोग करें ...

=IIf(RowNumber("DataSet1")  Mod 2 = 1, "White","Blue")

2

@ आदित्य का जवाब बहुत अच्छा है, लेकिन ऐसे उदाहरण हैं जहां फ़ॉर्मेटिंग को बंद कर दिया जाएगा यदि पंक्ति के पहले सेल (पंक्ति पृष्ठभूमि स्वरूपण के लिए) में एक लापता मान है (स्तंभ / पंक्तियों के समूह के साथ जटिल टैबलिक्स में और लापता मान)।

@ आदित्य का समाधान चतुराई (पंक्ति) समूह के भीतर पंक्ति संख्या की पहचान करने के लिए चतुराई countDistinctसे runningValueफ़ंक्शन का परिणाम देता है । यदि आपके पास पहले सेल में अनुपलब्ध मान वाली टैबलिक्स पंक्तियाँ हैं, runningValueतो countDistinctपरिणाम में वृद्धि नहीं होगी और यह पिछली पंक्ति की संख्या (और, इसलिए, उस सेल के प्रारूपण को प्रभावित करेगी)। उस खाते के लिए, आपको countDistinctमूल्य को ऑफसेट करने के लिए एक अतिरिक्त शब्द जोड़ना होगा । मेरा लक्ष्य पंक्ति समूह में पहले चल रहे मूल्य की जांच करना था (नीचे स्निपेट की पंक्ति 3 देखें):

=iif(
    (RunningValue(Fields![RowGroupField].Value, countDistinct, "FakeOrRealImmediateParentGroup")
    + iif(IsNothing(RunningValue(Fields![RowGroupField].Value, First, "GroupForRowGroupField")), 1, 0)
    ) mod 2, "White", "LightGrey")

उम्मीद है की यह मदद करेगा।


धन्यवाद @rpyzh, यह एक आम अभिभावक पंक्ति समूह रिपोर्ट के साथ मेरे बहु-पंक्ति समूह के लिए काम करने वाला समाधान था!
Niallty

1

क्या कोई शेष फ़ील्ड को झूठे कोड में बदलने के पीछे के तर्क को समझा सकता है (ऊपर की पोस्ट से)

एक बात जिस पर मैंने गौर किया, वह यह कि शीर्ष दो विधियों में से किसी में भी इस बात की कोई धारणा नहीं है कि समूह में पहली पंक्ति किस रंग की होनी चाहिए; समूह पिछले समूह की अंतिम पंक्ति से विपरीत रंग के साथ शुरू होगा। मैं चाहता था कि मेरे समूह हमेशा एक ही रंग से शुरू हों ... प्रत्येक समूह की पहली पंक्ति हमेशा सफेद होनी चाहिए, और अगली पंक्ति रंगीन।

मूल अवधारणा प्रत्येक समूह के शुरू होने पर टॉगल को रीसेट करने की थी, इसलिए मैंने थोड़ा सा कोड जोड़ा:

Private bOddRow As Boolean
'*************************************************************************
'-- Display green-bar type color banding in detail rows
'-- Call from BackGroundColor property of all detail row textboxes
'-- Set Toggle True for first item, False for others.
'*************************************************************************
'
Function AlternateColor(ByVal OddColor As String, _
                  ByVal EvenColor As String, ByVal Toggle As Boolean) As String
         If Toggle Then bOddRow = Not bOddRow
         If bOddRow Then 
                Return OddColor
         Else
                 Return EvenColor
         End If
 End Function
 '
 Function RestartColor(ByVal OddColor As String) As String
         bOddRow = True
         Return OddColor
 End Function

इसलिए मेरे पास अब तीन अलग-अलग प्रकार के सेल बैकग्राउंड हैं:

  1. डेटा पंक्ति के पहले कॉलम में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", ट्रू) (यह पिछले उत्तर के समान ही है।)
  2. डेटा पंक्ति के शेष स्तंभों में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", गलत) (यह भी, पिछले उत्तर के समान है।)
  3. समूहीकरण पंक्ति के पहले स्तंभ में = Code.RestartColor ("ऐलिसबेल्यू") (यह नया है।)
  4. समूह की पंक्ति के शेष स्तंभों में = Code.AlternateColor ("ऐलिसबेल्यू", "व्हाइट", गलत) है (यह पहले इस्तेमाल किया गया था, लेकिन समूह पंक्ति के लिए इसका कोई उल्लेख नहीं है।)

यह मेरे लिए काम करता है। यदि आप चाहते हैं कि समूहीकरण पंक्ति गैर-रंगीन हो, या एक अलग रंग हो, तो यह इस बात से बिल्कुल स्पष्ट होना चाहिए कि इसे कैसे बदलना है।

कृपया इस कोड को बेहतर बनाने के लिए क्या किया जा सकता है, इसके बारे में टिप्पणी जोड़ने के लिए स्वतंत्र महसूस करें: मैं SSRS और VB दोनों के लिए बिल्कुल नया हूं, इसलिए मुझे दृढ़ता से संदेह है कि सुधार के लिए बहुत जगह है, लेकिन मूल विचार ध्वनि लगता है (और यह उपयोगी था) मेरे लिए) इसलिए मैं इसे यहां फेंकना चाहता था।


1

मैंने पंक्ति स्थान के साथ समूहीकृत टैबलिक्स पर इन सभी समाधानों की कोशिश की और पूरी रिपोर्ट में कोई भी काम नहीं किया। परिणाम डुप्लिकेट रंगीन पंक्तियों और अन्य समाधानों के परिणामस्वरूप वैकल्पिक कॉलम थे!

यहाँ वह फ़ंक्शन है जो मैंने लिखा है कि एक कॉलम की गणना का उपयोग करके मेरे लिए काम किया:

Private bOddRow As Boolean
Private cellCount as Integer

Function AlternateColorByColumnCount(ByVal OddColor As String, ByVal EvenColor As String, ByVal ColCount As Integer) As String

if cellCount = ColCount Then 
bOddRow = Not bOddRow
cellCount = 0
End if 

cellCount  = cellCount  + 1

if bOddRow Then
 Return OddColor
Else
 Return EvenColor
End If

End Function

7 कॉलम टैलिक्स के लिए मैं रो (सेल के) बैककलर के लिए इस अभिव्यक्ति का उपयोग करता हूं:

=Code.AlternateColorByColumnCount("LightGrey","White", 7)


0

मेरे मैट्रिक्स डेटा में मान गायब थे, इसलिए मैं काम करने के लिए अहम् का समाधान प्राप्त करने में सक्षम नहीं था, लेकिन इस समाधान ने मेरे लिए काम किया

मूल विचार अपने अंतरतम समूह पर एक बाल समूह और क्षेत्र बनाना है जिसमें रंग शामिल है। फिर उस फ़ील्ड के मान के आधार पर पंक्ति में प्रत्येक सेल के लिए रंग सेट करें।


मैट्रिक्स में गुम मूल्यों को संभालने के लिए @ आदित्य और मेरे उत्तर की जाँच करें। उपयोगी यदि आपके पास पहले से ही (या एक नकली) मूल समूह बनाने की इच्छा है। आपको इस तरह से एक अलग क्षेत्र नहीं बनाना पड़ेगा।
rpyzh

0

मेरे लिए काम करने वाले अन्य उत्तरों में से थोड़ा सा संशोधन। मेरे समूह में समूह के लिए दो मान हैं, इसलिए मैं उन्हें सही तरीके से वैकल्पिक रूप से प्राप्त करने के लिए दोनों को पहले आर्ग में डाल सकता था।

= Iif ( RunningValue (Fields!description.Value + Fields!name.Value, CountDistinct, Nothing) Mod 2 = 0,"#e6eed5", "Transparent")

0

दोनों पंक्ति और स्तंभ समूहों का उपयोग करते समय, मेरे पास एक मुद्दा था जहां रंग कॉलम के बीच वैकल्पिक होगा, भले ही यह एक ही पंक्ति हो। मैंने इसे एक वैश्विक वैरिएबल का उपयोग करके हल किया जो पंक्ति बदलने पर ही वैकल्पिक होता है:

Public Dim BGColor As String = "#ffffff"

Function AlternateColor() As String
  If BGColor = "#cccccc" Then
    BGColor = "#ffffff"
    Return "#cccccc"
  Else
    BGColor = "#cccccc"
    Return "#ffffff"
  End  If
End Function

अब, पंक्ति के पहले कॉलम में आप वैकल्पिक रूप से रंग अभिव्यक्ति सेट करना चाहते हैं:

= Code.AlternateColor ()

-

शेष कॉलम में, उन सभी को निम्न पर सेट करें:

= Code.BGColor

यह पहला कॉलम तैयार होने के बाद ही रंगों को वैकल्पिक बनाना चाहिए।

यह (असंदिग्ध रूप से) प्रदर्शन में सुधार कर सकता है, भी, क्योंकि इसके लिए प्रत्येक कॉलम के लिए गणित की गणना करने की आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.