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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top