Управление диаграммой Несколькими областями диаграммы, одной и той же таблицей

StackOverflow https://stackoverflow.com/questions/1425952

  •  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"

Добрался туда в конце концов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top