Thêm màu hàng xen kẽ vào báo cáo dịch vụ báo cáo SQL Server


141

Làm cách nào để tô bóng các hàng xen kẽ trong báo cáo Dịch vụ báo cáo SQL Server?


Chỉnh sửa: Có một loạt các câu trả lời hay được liệt kê dưới đây - từ nhanh chóngđơn giản đến phức tạp và toàn diện . Than ôi, tôi chỉ có thể chọn một ...


2
= IIf (RowNumber (Không có gì) Mod 2 = 0, "Không màu", "# DDEBF7")
Stefan Steiger

Nếu bạn chọn nhiều ô, bạn không thể chỉnh sửa các thuộc tính của hộp văn bản, nhưng bạn có thể truy cập màu tô vào bảng thuộc tính và đặt biểu thức ở đó!
Kitsu.eb

Câu trả lời:


213

Chuyển đến thuộc tính BackgroundColor của hàng của bảng và chọn "Biểu thức ..."

Sử dụng biểu thức này:

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

Thủ thuật này có thể được áp dụng cho nhiều lĩnh vực của báo cáo.

Và trong .NET 3.5+ Bạn có thể sử dụng:

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

Không tìm kiếm đại diện - Tôi chỉ tự nghiên cứu câu hỏi này và nghĩ rằng tôi muốn chia sẻ.


10
Điều này thất bại trong một số trường hợp nhất định, đặc biệt là trong các bảng và đối tượng ma trận có rất nhiều tổng phụ. Phản ứng của Catch22 không có những hạn chế tương tự. Ngoài ra, phương pháp của Catch22 có thể được sử dụng để buộc các cột trong ma trận có các màu cột xen kẽ rất hữu ích một lần trong mặt trăng xanh.
Người dùng đã đăng ký

16
Tôi luôn đảm bảo nâng cao ai đó trả lời câu hỏi của chính họ. Quá thường xuyên, người hỏi tự tìm câu trả lời và sau đó không bao giờ quay lại để đăng nó, khiến những người còn lại có thể có cùng một câu hỏi trong bóng tối. Một vết sưng cho bạn, thưa ông.
Matt DiTrolio

4
Khi tôi sử dụng đoạn mã trên, tôi nhận được một thông báo cảnh báo giống [rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor. như biểu thức chính xác =IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing). Cảm ơn các mẹo mặc dù.
Russell B

2
Điều này đưa ra vấn đề trong trường hợp nhóm và xem chi tiết

3
một số trình duyệt không thể xử lý "Trong suốt" hoặc "Không có gì". Đặt cược tốt nhất sẽ là sử dụng "Trắng"
Nate S.

89

Sử dụng IIF (RowNumber ...) có thể dẫn đến một số vấn đề khi các hàng đang được nhóm và một cách khác là sử dụng hàm VBScript đơn giản để xác định màu.

Đó là một nỗ lực hơn một chút nhưng khi giải pháp cơ bản không đủ, đó là một giải pháp thay thế tốt đẹp.

Về cơ bản, bạn thêm mã vào Báo cáo như sau ...

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

Sau đó, trên mỗi ô, đặt BackgroundColor như sau:

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

Chi tiết đầy đủ có trên bài viết này


Đoạn mã trên được thêm vào phần Mã của báo cáo hoặc vào trang phía sau mã trong dự án VB.NET, được biên dịch và triển khai dưới dạng DLL được tham chiếu dưới dạng tập hợp. Tôi khuyên bạn nên nỗ lực thêm để triển khai điều này như một dll vì bạn thường tham khảo điều này trong nhiều báo cáo.
Người dùng đã đăng ký

Đây là cách ưa thích của tôi để xử lý vấn đề nhóm, sau khi thử một vài bản hack khác. Nó không bị hỏng khi sắp xếp tương tác được áp dụng cho một cột. +1 và cảm ơn rất nhiều.
Rex Miller

Màu sắc được bù khi bạn có số lượng hàng lẻ.
K Richard

20
Đừng quên thay đổi "Đúng" thành "Sai" cho tất cả các cột trong hàng sau lần đầu tiên, nếu không bạn sẽ thấy hiệu ứng bàn cờ! Cảm ơn giải pháp - nó hoạt động rất tốt!
Peter Mularien

Peter Mularien: Tôi đang gặp vấn đề này, bạn có thể giải thích cách khắc phục không?
Kỹ sư phần mềm Bill

64

Tôi đã có được hiệu ứng cờ vua khi tôi sử dụng giải pháp của Catch22, tôi nghĩ bởi vì ma trận của tôi có nhiều hơn một cột trong thiết kế. biểu hiện đó đã làm việc tốt với tôi:

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

13
Câu trả lời này đáng được chú ý hơn nhiều - đó là một giải pháp sạch hoạt động hoàn hảo trong ma trận với các nhóm hàng và nhóm cột và không yêu cầu mã tùy chỉnh để hoạt động. Xinh đẹp!
Stefan Mohr

9
Trên thực tế, điều này hoạt động tốt ngay cả đối với nhiều cột - nhưng không phải nếu bạn có dữ liệu "thiếu" trong một nhóm. Vì vậy, nếu bạn có dữ liệu có 12 tháng dữ liệu vào năm 2007 nhưng không có dữ liệu tháng 1 năm 2006 và nhóm theo tháng trên các hàng và năm trên các cột, màu 2006 sẽ bị tắt bởi vì RunningValue không đồng bộ vì mặc dù có vẫn là một hộp trong ma trận cho "tháng 1 năm 2006" không có dữ liệu trong bộ dữ liệu và RunningValue vẫn giữ nguyên, không thay đổi màu sắc, v.v.
Kyle Hale

2
@ahmad cái này gần lắm. Tôi gặp vấn đề trong đó các ô trống sử dụng màu đối diện. Làm thế nào để tôi chắc chắn rằng các hộp trống được tô màu đúng?
FistOfFury

@KyleHale bạn có cách khắc phục cho hộp màu bị thiếu không?
FistOfFury

2
@FistOfFury Giải pháp duy nhất tôi biết là đảm bảo giá trị được đặt (thường là 0) cho dữ liệu bị thiếu.
Kyle Hale

20

Tôi đã thay đổi giải pháp của @ Catch22 Một chút vì tôi không thích ý tưởng phải đi vào từng lĩnh vực nếu tôi quyết định tôi muốn thay đổi một trong các màu. Điều này đặc biệt quan trọng trong các báo cáo có nhiều trường cần thay đổi biến màu.

'*************************************************************************
' -- 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

Lưu ý rằng tôi đã thay đổi chức năng từ một trong đó chấp nhận màu sắc sang một màu có chứa các màu được sử dụng.

Sau đó, trong mỗi lĩnh vực thêm:

=Code.AlternateColor(rownumber(nothing))

Điều này mạnh mẽ hơn nhiều so với việc thay đổi màu thủ công trong màu nền của từng trường.


1
Đẹp bổ sung cho chủ đề này! Tôi thích không phải đặt "Đúng" hoặc "Sai" trong mỗi cột. Tôi cũng thích tùy chọn "mod 3" vì vậy tôi chỉ có thể tô bóng mỗi hàng thứ 3.
Baodad

Tôi cũng thích giải pháp này. Tuy nhiên, nó không hoạt động đối với tôi khi tôi sử dụng nhóm hàng. @ ahmad của giải pháp trên làm việc cho tôi mặc dù.
Baodad

Đây là một giải pháp tuyệt vời cho tablix nếu bạn không muốn thêm các trường bổ sung vào Bộ dữ liệu của mình!
clamchoda

16

Một điều tôi nhận thấy là cả hai phương pháp hàng đầu đều không có bất kỳ khái niệm nào về hàng màu đầu tiên nên có trong một nhóm; nhóm sẽ chỉ bắt đầu với màu đối diện từ dòng cuối cùng của nhóm trước. Tôi muốn các nhóm của mình luôn bắt đầu với cùng một màu ... hàng đầu tiên của mỗi nhóm phải luôn có màu trắng và hàng tiếp theo được tô màu.

Khái niệm cơ bản là đặt lại chuyển đổi khi mỗi nhóm bắt đầu, vì vậy tôi đã thêm một chút mã:

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

Vì vậy, bây giờ tôi có ba loại nền tế bào khác nhau:

  1. Cột đầu tiên của hàng dữ liệu có = Code.AlternateColor ("AliceBlue", "White", True) (Điều này giống như câu trả lời trước.)
  2. Các cột còn lại của hàng dữ liệu có = Code.AlternateColor ("AliceBlue", "White", false) (Điều này, cũng, giống như câu trả lời trước.)
  3. Cột đầu tiên của hàng nhóm có = Code.RestartColor ("AliceBlue") (Đây là mới.)
  4. Các cột còn lại của hàng nhóm có = Code.AlternateColor ("AliceBlue", "White", false) (Điều này đã được sử dụng trước đây, nhưng không đề cập đến nó cho nhóm hàng.)

Điều này làm việc cho tôi. Nếu bạn muốn hàng nhóm không có màu, hoặc một màu khác, thì điều này khá rõ ràng từ cách này để thay đổi nó xung quanh.

Xin vui lòng thêm ý kiến ​​về những gì có thể được thực hiện để cải thiện mã này: Tôi hoàn toàn mới đối với cả SSRS và VB, vì vậy tôi nghi ngờ rằng có nhiều chỗ để cải thiện, nhưng ý tưởng cơ bản có vẻ hợp lý (và nó rất hữu ích cho tôi) vì vậy tôi muốn ném nó ra đây.


Bạn cũng có thể đặt lại đánh số hàng cho từng nhóm như được mô tả trong câu trả lời này .
StackOverthrow

10

cho các tiêu đề / chân trang nhóm:

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

Bạn cũng có thể sử dụng điều này để thiết lập lại cài đặt số đếm màu của hàng trong mỗi nhóm. Tôi muốn hàng chi tiết đầu tiên trong mỗi nhóm phụ bắt đầu với Trắng và giải pháp này (khi được sử dụng trên hàng chi tiết) cho phép điều đó xảy ra:

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

Xem: http://msdn.microsoft.com/en-us/l Library / ms159136 (v = sql.100) .aspx


7

Giải pháp của Michael Haren hoạt động tốt với tôi. Tuy nhiên tôi nhận được một cảnh báo nói rằng "Trong suốt" không phải là một BackgroundColor hợp lệ khi Xem trước. Đã tìm thấy một bản sửa lỗi nhanh từ Cài đặt các phần tử BackgroundColor của Báo cáo trong SSRS . Không sử dụng gì thay vì "Trong suốt"

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

Trắng sẽ tốt hơn thì không có gì.
Nate S.

6

Cách hiệu quả duy nhất để giải quyết vấn đề này mà không cần sử dụng VB là "lưu trữ" giá trị modulo nhóm hàng trong nhóm nhóm hàng (và bên ngoài nhóm cột) và tham chiếu rõ ràng trong nhóm nhóm của bạn. Tôi tìm thấy giải pháp này tại

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

Nhưng Ankeet không phải là công việc tốt nhất để giải thích những gì đang xảy ra và giải pháp của anh ấy đề xuất bước không cần thiết là tạo một nhóm trên một giá trị không đổi, vì vậy đây là quy trình từng bước của tôi cho một ma trận với một nhóm hàng duy nhất Rowgroup1:

  1. Tạo một cột mới trong Rowgroup1. Đổi tên hộp văn bản cho cái này thành một cái gì đó như RowgroupColor.
  2. Đặt giá trị của hộp văn bản của RowgroupColor thành

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

  3. Đặt thuộc tính BackgroundColor của tất cả các ô hàng của bạn thành

    "=ReportItems!RowGroupColor.Value"

  4. Đặt chiều rộng của cột RowgroupColor thành 0pt và đặt CanGrow thành false để ẩn nó khỏi các máy khách.

Voila! Điều này cũng giải quyết rất nhiều vấn đề được đề cập trong chủ đề này:

  • Đặt lại tự động cho các nhóm con: Chỉ cần thêm một cột mới cho nhóm hàng đó, thực hiện RunningValue trên các giá trị nhóm của nó .
  • Không cần phải lo lắng về các toggles đúng / sai.
  • Màu sắc chỉ được tổ chức ở một nơi để dễ dàng sửa đổi.
  • Có thể được sử dụng thay thế cho nhau trên các nhóm hàng hoặc cột (chỉ cần đặt chiều cao thành 0 thay vì chiều rộng)

Thật tuyệt vời nếu SSRS sẽ hiển thị các thuộc tính bên cạnh Giá trị trên Hộp văn bản. Bạn chỉ có thể nhét loại tính toán này vào thuộc tính BackgroundColor của các hộp văn bản nhóm hàng và sau đó tham chiếu nó dưới dạng ReportItems! Rowgroup.BackgroundColor trong tất cả các ô khác.

À, chúng ta có thể mơ ...


5

Vấn đề của tôi là tôi muốn tất cả các cột liên tiếp có cùng một nền tảng. Tôi đã nhóm cả hai theo hàng và theo cột và với hai giải pháp hàng đầu ở đây tôi đã nhận được tất cả các hàng trong cột 1 với nền màu, tất cả các hàng trong cột 2 có nền trắng, tất cả các hàng trong cột 3 có nền màu , và như thế. Như thể RowNumberbOddRow(trong giải pháp của Catch22) chú ý đến nhóm cột của tôi thay vì bỏ qua điều đó và chỉ xen kẽ với một hàng mới.

Điều tôi muốn là tất cả các cột trong hàng 1 đều có nền trắng, sau đó tất cả các cột trong hàng 2 để có nền màu, sau đó tất cả các cột trong hàng 3 sẽ có nền trắng, v.v. Tôi đã có được hiệu ứng này bằng cách sử dụng câu trả lời đã chọn nhưng thay vì chuyển Nothingđến RowNumber, tôi đã chuyển tên của nhóm cột của mình, vd

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

Nghĩ rằng điều này có thể hữu ích cho người khác.


4

Tôi nghĩ thủ thuật này không được thảo luận ở đây. Nó đây rồi

Trong bất kỳ loại ma trận phức tạp nào, khi bạn muốn các màu ô thay thế, theo hàng thông minh hoặc cột khôn ngoan, giải pháp làm việc là,

Nếu bạn muốn một màu xen kẽ của các tế bào thì thông minh

  1. Ở góc dưới bên phải của chế độ xem thiết kế báo cáo, trong "Nhóm cột", tạo nhóm cha giả trên 1 (sử dụng biểu thức), được đặt tên là "FakeParentgroup".
  2. Sau đó, trong thiết kế báo cáo, đối với các ô được tô màu thay thế, hãy sử dụng biểu thức màu nền sau

= IIF (RunningValue (Các trường! [Cột GroupField] .Value, CountDistinc, "FakeParentgroup") MOD 2, "White", "LightGrey")

Đó là tất cả.

Tương tự cho hàng màu thay thế khôn ngoan, chỉ cần bạn phải chỉnh sửa giải pháp cho phù hợp.

LƯU Ý: Ở đây, đôi khi bạn cần đặt đường viền của các ô tương ứng, thường thì nó sẽ biến mất.

Cũng đừng quên xóa giá trị 1 trong báo cáo xuất hiện khi bạn tạo nhóm cha mẹ giả.


1
Câu trả lời này chắc chắn là một phát hiện tuyệt vời cho những người phải tạo dải hàng trong các tablix phức tạp! Nếu có một nhóm cha mẹ hiện có, sử dụng nó. Nếu không, hãy tạo FakeParentgroup. Thiếu giá trị trong các tablixes có cả nhóm cột và nhóm hàng thường không định dạng. Xem câu trả lời của tôi dựa trên @ Aditya để tính các giá trị còn thiếu trong ô đầu tiên.
rpyzh

2

Nếu đối với toàn bộ báo cáo bạn cần một màu xen kẽ, bạn có thể sử dụng Bộ dữ liệu mà Tablix của bạn bị ràng buộc để đánh dấu nhận dạng trên toàn báo cáo trên báo cáo và sử dụng nó trong hàm RowNumber ...

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

2

Câu trả lời của @ Aditya rất hay, nhưng có những trường hợp định dạng sẽ bị loại bỏ nếu ô đầu tiên của hàng (đối với định dạng nền hàng) có một giá trị bị thiếu (trong các tablixes phức tạp với các nhóm cột / hàng và thiếu giá trị).

Giải pháp của @ Aditya khéo léo tận dụng countDistinctkết quả của runningValuehàm để xác định số hàng trong nhóm tablix (hàng). Nếu bạn có các hàng tablix có giá trị bị thiếu trong ô đầu tiên, runningValuesẽ không tăng countDistinctkết quả và nó sẽ trả về số của hàng trước đó (và do đó, sẽ ảnh hưởng đến định dạng của ô đó). Để giải thích cho điều đó, bạn sẽ phải thêm một thuật ngữ bổ sung để bù countDistinctgiá trị. Việc của tôi là kiểm tra giá trị chạy đầu tiên trong chính nhóm hàng (xem dòng 3 của đoạn trích bên dưới):

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

Hi vọng điêu nay co ich.


Cảm ơn @rpyzh, đây là giải pháp hiệu quả cho nhóm nhiều hàng của tôi với Báo cáo nhóm hàng cha mẹ chung!
Niallty

1

Ai đó có thể giải thích logic đằng sau việc biến phần còn lại của các trường thành sai trong mã bên dưới (từ bài đăng trên)

Một điều tôi nhận thấy là cả hai phương pháp hàng đầu đều không có bất kỳ khái niệm nào về hàng màu đầu tiên nên có trong một nhóm; nhóm sẽ chỉ bắt đầu với màu đối diện từ dòng cuối cùng của nhóm trước. Tôi muốn các nhóm của mình luôn bắt đầu với cùng một màu ... hàng đầu tiên của mỗi nhóm phải luôn có màu trắng và hàng tiếp theo được tô màu.

Khái niệm cơ bản là đặt lại chuyển đổi khi mỗi nhóm bắt đầu, vì vậy tôi đã thêm một chút mã:

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

Vì vậy, bây giờ tôi có ba loại nền tế bào khác nhau:

  1. Cột đầu tiên của hàng dữ liệu có = Code.AlternateColor ("AliceBlue", "White", True) (Điều này giống như câu trả lời trước.)
  2. Các cột còn lại của hàng dữ liệu có = Code.AlternateColor ("AliceBlue", "White", false) (Điều này, cũng, giống như câu trả lời trước.)
  3. Cột đầu tiên của hàng nhóm có = Code.RestartColor ("AliceBlue") (Đây là mới.)
  4. Các cột còn lại của hàng nhóm có = Code.AlternateColor ("AliceBlue", "White", false) (Điều này đã được sử dụng trước đây, nhưng không đề cập đến nó cho nhóm hàng.)

Điều này làm việc cho tôi. Nếu bạn muốn hàng nhóm không có màu, hoặc một màu khác, thì điều này khá rõ ràng từ cách này để thay đổi nó xung quanh.

Xin vui lòng thêm ý kiến ​​về những gì có thể được thực hiện để cải thiện mã này: Tôi hoàn toàn mới đối với cả SSRS và VB, vì vậy tôi nghi ngờ rằng có nhiều chỗ để cải thiện, nhưng ý tưởng cơ bản có vẻ hợp lý (và nó rất hữu ích cho tôi) vì vậy tôi muốn ném nó ra đây.


1

Tôi đã thử tất cả các giải pháp này trên Tablix được nhóm với các khoảng trắng hàng và không có giải pháp nào hoạt động trên toàn bộ báo cáo. Kết quả là các hàng màu trùng lặp và các giải pháp khác dẫn đến các cột xen kẽ!

Đây là chức năng tôi đã viết cho tôi khi sử dụng Đếm cột:

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

Đối với Tablix 7 cột, tôi sử dụng biểu thức này cho Back (của các ô) Backcolour:

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


0

Dữ liệu ma trận của tôi bị thiếu các giá trị trong đó, vì vậy tôi không thể làm cho giải pháp của ahmad hoạt động, nhưng giải pháp này hiệu quả với tôi

Ý tưởng cơ bản là tạo một nhóm con và trường trên nhóm trong cùng của bạn có chứa màu. Sau đó, đặt màu cho từng ô trong hàng dựa trên giá trị của trường đó.


Hãy xem @ Aditya và câu trả lời của tôi để xử lý các giá trị còn thiếu trong ma trận. Hữu ích nếu bạn đã có (hoặc sẵn sàng tạo nhóm phụ huynh giả). Bạn sẽ không phải tạo một lĩnh vực riêng theo cách đó.
rpyzh

0

Sửa đổi nhẹ các câu trả lời khác từ đây mà làm việc cho tôi. Nhóm của tôi có hai giá trị để nhóm, vì vậy tôi có thể đặt cả hai trong đối số đầu tiên với dấu + để làm cho nó thay thế chính xác

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

0

Khi sử dụng cả hai nhóm hàng và cột, tôi gặp vấn đề trong đó các màu sẽ xen kẽ giữa các cột mặc dù nó là cùng một hàng. Tôi đã giải quyết vấn đề này bằng cách sử dụng biến toàn cục chỉ thay thế khi hàng thay đổi:

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

Bây giờ, trong cột đầu tiên của hàng bạn muốn thay thế, hãy đặt biểu thức màu thành:

= Mã.AlternateColor ()

-

Trong các cột còn lại, đặt tất cả chúng thành:

= Mã.BGColor

Điều này sẽ làm cho các màu thay thế chỉ sau khi cột đầu tiên được vẽ.

Điều này cũng có thể (không đáng tin cậy) cải thiện hiệu suất, vì nó không cần phải tính toán cho mỗi cột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.