首页 > 解决方案 > Telerik RadHtmlChart 饼图错误

问题描述

我正在尝试使用 RadHtmlChart 饼图,但出现以下错误:

无法从“Y”属性的字符串表示“StatCount”创建“System.Nullable”类型的对象。

如果我对 asp:Chart 使用相同的 SqlDataSource,它会按预期工作。所以我的猜测是这是 RadHtmlChart 特有的——但这只是一个猜测。

查询 (MS SQL Server 2012) 返回以下内容:

+----------------------+-----------------+
|         stat         |    StatCount    |
+----------------------+-----------------+
|        Closed        |      4067       | 
+----------------------+-----------------+
|   Pending Assignment |        1        |
+----------------------+-----------------+
|       QA Ready       |       600       | 
+----------------------+-----------------+
|        In QA         |       400       |
+----------------------+-----------------+
|       Assigned       |      4946       |
+----------------------+-----------------+

这是我用来获取这些数据的 SqlDataSource:

<asp:SqlDataSource 
    ID="sdsAssnmtStats"
    runat="server"
    ConnectionString='<%$ ConnectionStrings:DefaultConnection %>' 
    SelectCommand="SELECT s.stat ,cast(case s.stat when 'Pending Assignment' then count(a.clmNo) when 'Assigned' then count(a.clmNo) when 'QA Ready' then count(a.clmNo) when 'In QA' then count(a.clmNo) when 'Closed' then count(a.clmNo) else 0 end as nvarchar) as StatCount FROM assnmts a inner join assnmtStats astats on a.assnmtIdPk = astats.assnmtIdFk inner join stats s on astats.aStatId = s.statIdPk inner join repAssnmts ra on a.assnmtIdPk = ra.assnmtIdFk inner join aspnetusers anu on ra.repId = anu.Id inner join clients c on a.clientIdFk = c.clientIdPk inner join carrs on a.carrierId = carrs.carrIdPk inner join (SELECT a2.assnmtIdPk, MAX(astats2.asCrtdDt) as MaxDate FROM assnmts a2 INNER JOIN assnmtStats astats2 on a2.assnmtIdPk = astats2.assnmtIdFk GROUP BY a2.assnmtIdPk) mdt on a.assnmtIdPk = mdt.assnmtIdPk and astats.asCrtdDt = mdt.MaxDate inner join (select a3.assnmtIdPk, MAX(ra2.raCrtdDt) as MaxRepDate from assnmts a3 inner join repAssnmts ra2 on a3.assnmtIdPk = ra2.assnmtIdFk group by a3.assnmtIdPk) mrepdt on a.assnmtIdPk = mrepdt.assnmtIdPk and ra.raCrtdDt = mrepdt.MaxRepDate group by s.stat">
</asp:SqlDataSource>

这是 RadHtmlChart:

<telerik:RadHtmlChart runat="server" ID="rhc_assnmtStats" Transitions="true" Skin="Default" DataSourceID="sdsAssnmtStats" >
        <PlotArea>
            <Series>
                <telerik:PieSeries StartAngle="90">
                    <LabelsAppearance Position="OutsideEnd"></LabelsAppearance>
                    <SeriesItems>
                        <telerik:PieSeriesItem Exploded="true" Name="stat" Visible="true" VisibleInLegend="true" Y="StatCount" />
                    </SeriesItems>
                </telerik:PieSeries>
            </Series>
        </PlotArea>
        <Legend>
            <Appearance Position="Right" Visible="true"></Appearance>
        </Legend>
        <ChartTitle Text="Assignment Counts by Status">
            <Appearance Align="Center" Position="Top"></Appearance>
        </ChartTitle>
    </telerik:RadHtmlChart>

这是我使用的 asp:Chart 标记,它按预期工作:

<asp:Chart ID="assnmtStats" runat="server" DataSourceID="sdsAssnmtStats">
            <Titles>
                <asp:Title Font="Times New Roman, 14pt, style=Bold, Italic" Name="AssnmtStatsTitle" Text="Assignment Counts by Status"></asp:Title>
            </Titles>
            <Series>
                <asp:Series Name="Series1" ChartType="Pie" XValueMember="stat" YValueMembers="StatCount" YValueType="Int32" Legend="assnmtStatsLegend" IsValueShownAsLabel="true"></asp:Series>
            </Series>
            <ChartAreas>
                <asp:ChartArea Name="assnmtStatsChartArea" Area3DStyle-Enable3D="true"></asp:ChartArea>
            </ChartAreas>
            <Legends>
                <asp:Legend Name="assnmtStatsLegend" Alignment="Center"></asp:Legend>
            </Legends>
        </asp:Chart>

我需要做什么才能让 RadHtmlChart 工作?

这是我在 Visual Studio 2017 中创建的 ASP.net C# WebForms 应用程序。

标签: telerikpie-chartradgrid

解决方案


我收到了 Telerik 的解决方案。我希望这可以帮助任何其他在将其网站上的演示从条形图转换为饼图时遇到困难的人。

当数据绑定图表系列时,您需要将其 DataFieldY 属性设置为指向您要使用的字段名称,而不是填充其 SeriesItems 集合。

这是工作解决方案:

<telerik:RadHtmlChart runat="server" ID="rhc_assnmtStats" Transitions="true" Skin="Default" DataSourceID="sdsAssnmtStats" >
            <PlotArea>
                <Series>
                    <telerik:PieSeries StartAngle="90" NameField="stat" DataFieldY="StatCount">
                        <LabelsAppearance Position="OutsideEnd"></LabelsAppearance>
                    </telerik:PieSeries>
                </Series>
            </PlotArea>
            <Legend>
                <Appearance Position="Right" Visible="true"></Appearance>
            </Legend>
            <ChartTitle Text="Assignment Counts by Status">
                <Appearance Align="Center" Position="Top"></Appearance>
            </ChartTitle>
        </telerik:RadHtmlChart>

推荐阅读