문제
나는 세 개의 열이있는 테이블을 가지고 있었고, 후자는 그 값이있는 테이블을 가지고 있습니다. 나는 각각의 데이터에 대한 데이터를 표시하는 두 개의 파이 차트를 출력하려고합니다. 어떤 이유로 든 두 번째 파이 차트는 표시되지 않고 대신 회색 정사각형으로 나타납니다. 또한 전설은 두 번 연속적으로 보이지만 나에게는 말이되지 않는 단일 전설 일뿐입니다.
마크 업은 다음과 같습니다.
<asp:Chart Height="500" Width="500" ID="ClientModelChart" runat="server">
<Series>
<asp:Series ChartType="Pie" IsValueShownAsLabel="true" Name="PortfolioActual"></asp:Series>
<asp:Series ChartType="Pie" IsValueShownAsLabel="true" Name="ModelActual"></asp:Series>
</Series>
<Legends>
<asp:Legend Name="PortfolioActual"></asp:Legend>
<asp:Legend Name="ModelActual"></asp:Legend>
</Legends>
<ChartAreas>
<asp:ChartArea Area3DStyle-Enable3D="true" Area3DStyle-LightStyle="Realistic" Name="PortfolioActual"></asp:ChartArea>
<asp:ChartArea Area3DStyle-Enable3D="true" Name="ModelActual"></asp:ChartArea>
</ChartAreas>
</asp:Chart>
그럼 난 SqlDataAdapter
채우는 데 사용됩니다 DataSet
, 나는 다음을 돌린다 DataTableCollection
에 IEnumerable
차트 시리즈를 바인딩 할 때 사용할 수 있도록 목록 유형. 그것은 약간 털이 많은 것 같지만, 내가 이것을하는 이유는 DataSet
나중에 일부 XSLT 출력에 사용되므로 이미 필요한/원하는 데이터를 이미 가지고있을 때 데이터베이스를 다시 정체하는 점이 없습니다.
Dim sectorList As IList = CType(ds.Tables(1), IListSource).GetList()
ClientModelChart.Series("PortfolioActual").Points.DataBind(sectorList, "Sector", "Model", Nothing)
ClientModelChart.Series("ModelActual").Points.DataBind(sectorList, "Sector", "Client", Nothing)
따라서 두 번째 파이 차트 (Modelactual)는 전혀 표시되지 않으며 회색 정사각형 일뿐입니다. 나는 소용이 없으면 몇 시간 동안 피고를 겪고 있습니다. (편집 : 또한, 나는 이미 비슷한 일을 해냈으므로 왜 이것이 작동하지 않는지 모르겠습니다. 다른 하나와의 차이점은 처음에는 두 개의 별도 데이터 세트에서 나왔지만 그렇지 않아서는 안됩니다. 작동하지 않는 이유)
감사.
해결책
좋아, 나는 아침을 어리석게 보냈지 만 모든 문제를 해결했다. 전설의 문제는 다음과 같은 시리즈에 대한 범례를 지정해야하기 때문에 해결되었습니다.
<asp:Chart Height="500" Width="500" ID="ClientModelChart" runat="server">
<Legends>
<asp:Legend Name="PortfolioActual"></asp:Legend>
<asp:Legend Enabled="false" Name="ModelActual"></asp:Legend>
</Legends>
<Series>
<asp:Series ChartType="Pie" Legend="PortfolioActual" ChartArea="PortfolioActual" IsValueShownAsLabel="true" Name="PortfolioActual"></asp:Series>
<asp:Series ChartType="Pie" Legend="ModelActual" ChartArea="ModelActual" IsValueShownAsLabel="true" Name="ModelActual"></asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Area3DStyle-Enable3D="true" Area3DStyle-LightStyle="Realistic" Name="PortfolioActual"></asp:ChartArea>
<asp:ChartArea Area3DStyle-Enable3D="true" Area3DStyle-LightStyle="Realistic" Name="ModelActual"></asp:ChartArea>
</ChartAreas>
</asp:Chart>
그리고 데이터를 바인딩하는 것은 대신 다음과 같이 수행되어야합니다.
Dim sectorList As IList = CType(ds.Tables(1), IListSource).GetList()
ClientModelChart.Series("PortfolioActual").Points.DataBindXY(sectorList, "Sector", sectorList, "Model")
ClientModelChart.Series("ModelActual").Points.DataBindXY(sectorList, "Sector", sectorList, "Client")
ClientModelChart.Series("PortfolioActual")("PieLabelStyle") = "Outside"
ClientModelChart.Series("ModelActual")("PieLabelStyle") = "Outside"
결국 거기에 도착했습니다.