Controllo grafico Più ChartArea, Stessa tabella
-
07-07-2019 - |
Domanda
Ho una tabella con tre colonne, le ultime due con valori. Sto cercando di generare due grafici a torta che visualizzano i dati per ognuno. Per qualche motivo, il secondo grafico a torta non viene visualizzato, ma viene visualizzato come un quadrato grigio. Inoltre, la leggenda appare due volte consecutive, ma è solo una singola leggenda che non ha senso per me.
Ecco il markup:
<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>
Poi ho un SqlDataAdapter
usato per riempire un DataSet
, poi trasformo il DataTableCollection
in un IEnumerable tipo di elenco in modo da poterlo utilizzare quando si collegano i dati alle serie di grafici. Sembra un po 'peloso, ma il motivo per cui lo faccio è perché
DataSet
viene utilizzato per alcuni output XSLT in seguito, quindi non ha senso interrogare nuovamente il database quando ho già i dati che ho necessità / bisogno.
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)
Quindi il secondo grafico a torta (ModelActual) non viene visualizzato affatto, è solo un quadrato grigio. Ho armeggiato per ore senza risultati. (EDIT: Inoltre, ho già fatto qualcosa di simile, quindi non so perché questo non funziona. La differenza con l'altro è che inizialmente proveniva da due set di dati separati, ma non dovrebbe essere il motivo per cui non funziona)
Grazie.
Soluzione
Okay, ci ho passato la mattinata stupidamente, ma ho risolto tutti i problemi. Il problema con la legenda è stato risolto perché è necessario specificare la legenda rispetto alla serie in questo modo:
<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>
e l'associazione dei dati dovrebbe invece essere eseguita in questo modo:
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"
Ci siamo arrivati ??alla fine.