Управление диаграммой Несколькими областями диаграммы, одной и той же таблицей
-
07-07-2019 - |
Вопрос
У меня есть таблица с тремя столбцами, последние два из которых содержат значения в них.Я пытаюсь вывести две круговые диаграммы, отображающие данные для каждой из них.По какой-то причине вторая круговая диаграмма не отображается, вместо этого она отображается в виде серого квадрата.Кроме того, легенда появляется дважды подряд, но это всего лишь одна легенда, которая для меня не имеет смысла.
Вот разметка:
<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"
Добрался туда в конце концов.