Contrôle de graphique Multiple ChartArea's, Same Table
-
07-07-2019 - |
Question
J'ai un tableau avec trois colonnes, les deux dernières avec des valeurs. J'essaie de produire deux graphiques à secteurs affichant les données pour chacun. Pour une raison quelconque, le second graphique à secteurs ne s'affiche pas, il apparaît plutôt sous la forme d'un carré gris. De plus, la légende apparaît deux fois de suite, mais ce n’est pour moi qu’une légende qui n’a aucun sens.
Voici le balisage:
<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>
Ensuite, j'ai un SqlDataAdapter
utilisé pour remplir un DataSet
, puis je tourne le DataTableCollection
en un IEnumerable
type de liste afin que je puisse l'utiliser lorsque des données lient la série de graphiques. Cela semble un peu poilu, mais la raison pour cela est que le DataSet
est utilisé ultérieurement pour certaines sorties XSLT, il est donc inutile de réinterroger la base de données alors que j'ai déjà les données I besoin / envie.
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)
Le second graphique à secteurs (ModelActual) ne s'affiche donc pas, il s'agit simplement d'un carré gris. Je tripote des heures sans succès. (EDIT: De plus, j’ai déjà fait quelque chose de similaire, donc je ne sais pas pourquoi celui-ci ne fonctionne pas. La différence avec mon autre, c’est qu’il provenait initialement de deux ensembles de données distincts, mais cela ne devrait pas être le cas. la raison pour laquelle cela ne fonctionne pas)
Merci.
La solution
D'accord, j'ai passé la matinée dessus bêtement, mais j'ai résolu tous les problèmes. Le problème avec la légende a été résolu car vous devez spécifier la légende par rapport à la série, comme suit:
<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>
et la liaison des données doit se faire comme suit:
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"
Arrivé à la fin.