代码之家  ›  专栏  ›  技术社区  ›  Sean Hanley

如何在SQL Server Reporting Services中最好地显示复选框?

  •  35
  • Sean Hanley  · 技术社区  · 17 年前

    我们遇到的Reporting Services的许多怪癖之一是完全没有复选框控件,甚至没有类似的东西。

    我们有一个表单,它应该根据从数据库中提取的信息自动填写。我们有几个位数据类型字段。打印出“True”或“False”看起来很愚蠢,因为这看起来像是一个自动填写的表单,所以我们希望有一系列复选框和标签,可以选中或取消选中。

    我们正在运行SSRS 2005,但我不知道SSRS 2008添加了复选框控件。即使是这样,我们暂时也需要一个替代方案。到目前为止,我们发现的最好的是:

    1. 使用Wingdings
    2. 使用图像
    3. 使用带边框的文本框并打印空白/空格或大写X

    这三种方法都需要 IIF 表情恶作剧。

    Wingdings的方法似乎可以接受,并且是最美观的,除了出于某种原因它并不总是正确打印。更重要的是,无论出于什么原因,PDF导出都将所有字体(通常)转换为Arial,所以我们得到了时髦的字母,而不是Windings dingbat。

    图像是基于像素的光栅,当沿着文本等侧矢量打印时效果不佳。除非小心处理,否则它们往往会拉伸、像素化,并做其他看起来不专业的事情。

    虽然这些方法确实有效(有些方法有上述限制),但它们都不是特别优雅。

    我们是否遗漏了一些显而易见的东西? 不太明显?微软有人有充分的理由解释为什么SSRS 2000中没有提供这样的控制,更不用说2个版本和8年后了吗?这不可能是第一次出现这个问题。..

    8 回复  |  直到 17 年前
        1
  •  20
  •   DCNYAM    17 年前

    I、 我和我店里的其他人一起使用了图像,根据字段值(true或false)切换隐藏属性。我们在模糊或缩放方面没有任何问题,除非我们试图将图像的比例明显增加到100%以上。

    我使用的另一个选项类似于wingdings的想法,但我只使用了一个普通的“X”。至少在我们的表单上,有人在框中使用X而不是复选标记并不罕见,所以看起来完全可以接受。此外,您在打印时不必担心奇怪的字符。

    至于为什么微软不包含复选框控件,我无法回答,因为我自己也一直在想同样的问题。

        2
  •  17
  •   Matthew    16 年前

    我只是想在这个博客上分享这个想法。 SSRS: How to Display Checkbox on Report

    1. 首先创建一个文本框
    2. 然后将字体系列更改为Wingdings
    3. 在文本框中插入一个表达式,并写出该表达式。

      =IIF(Fields!Active.Value,chr(254),"o")
      

      领域!活跃。值可以是查询中应返回布尔值1或0的任何值。

    4. 然后单击预览并查看复选框;)

    在我上面分享的博客上可以选择更多的风格。

    这是我的输出示例 enter image description here

        3
  •  13
  •   Peter O. Manuel Pinto    10 年前

    我用来显示复选框(或投票框)的内容:
    1-创建文本框(这将成为您的复选框)
    2-将字体更改为Arial Unicode MS
    3-在表达式窗口中使用:
    ChrW(&H2611)表示已填写的复选框
    ChrW(&H2610)代表空复选框

        4
  •  12
  •   grahamj42    5 年前

    除了已经介绍的不同方法外,自SQL Server 2008 R2起,还有一个内置控件可用于类似复选框的功能: 指示器 !

    请查看此处,了解如何使用它的详细信息: https://web.archive.org/web/20190916105459/http://blog.hoegaerden.be/2012/08/04/displaying-checkboxes-in-an-ssrs-report/

    能够使用以下类型的字段 一点 ,你必须把它扔到 国际性组织 第一。这可以在数据集查询中完成,也可以通过向数据集添加计算字段来完成。

    如果你想让NULL显示为黄色,那么你需要以这种方式构建表达式,这样它也会考虑到这一要求。

    以下是计算字段的可能表达式:

    =Switch(
        IsNothing(Fields!YourBoolean.Value), 50,
        Fields!YourBoolean.Value = False, 0,
        Fields!YourBoolean.Value = True, 100)
    

    根据字段的含义——是假好还是假坏——你可能需要交换0和100。

        5
  •  4
  •   Dragos Durlut    8 年前

    另一种方法是转到TextBox的“占位符属性”并检查 Html - Interpret HTML tag as styles

    然后在 Value - Expression 将这行代码置于选中状态:

    ="<font face=""Wingdings 2"" color=""green"">" & Chr(81) &"</font>" & "some other text"
    

    或者此代码示例未选中:

    ="<font face=""Wingdings 2"" color=""red"">" & Chr(163) &"</font>" & "some other text"
    

    这样,您就可以在同一个文本框中包含复选框和文本。

    Palceholder properties

    Later edit:

    如果您在显示时遇到问题 Wingdings 2 在Azure上,然后使用 Wingdings .

    显然,它奏效了。

    ="<font face=""Wingdings"" color=""green"">" & Chr(253) &"</font>" & "some other text"
    

    或者此代码示例未选中:

    ="<font face=""Wingdings"" color=""red"">" & Chr(168) &"</font>" & "some other text"
    
        6
  •  3
  •   Marco Guignard    13 年前

    您还可以使用字符串计算字段,如“[X]”或“[]”。它不如带边框的文本框漂亮,但你不必为值设置特定的控件,你可以用它填充表格或矩阵。

    至少这个复选框有一些解决方案。我仍在为我的文本寻找充分的理由(事实上,我正在寻找另一种解决方案,而不是SSRS所知道的)。

    ACCESS 97可以做这种事情,但SQL SERVER 2012不行。

        7
  •  2
  •   AndyM    17 年前

    我认为SSRS和嵌入128以上的字体字符有一个错误(ANSI编码需要做一些事情)。基本上你可以使用1-128精细,其余的显示为高矩形块。

    我喜欢NY的文本框有边框和可选的X的想法——这听起来简单有效。

        8
  •  2
  •   Paul Haan    7 年前

    这是基于Dragos Durlut的回答。我没有足够高的声誉来评论,但我可以回答。..

    我需要一个复选框作为作为参数传递的文本的一部分。该参数包含HTML,用于占位符设置,就像Dragos建议的那样:HTML-将HTML标签解释为样式。

    您可以使用HTML转义码(&+#+CharCode+;-->&#168;),而不必在HTML和字符串之间切换

    =“<font face='警告'><#168;</font>空复选框”

    由于mine是一个参数,它只需传入字符串:

    <font face='铃声'>&#168;</font>空复选框

    如果你需要选中复选框,你可以传入&;#253;或&#254;相反:

    <font face='Wingdings'>&#253;</font> filled with an x
    <font face='Wingdings'>&#254;</font> filled with a checkmark
    推荐文章