使用 MS 图表控件在 ASP.Net 饼图中出现的图例项目数是系列中项目数的 n 倍
Legend Items appearing n times more than the number of items in Series in ASP.Net Pie Chart using MS Chart Control
我在 ASP.Net 中使用 VB.Net 使用 MS 图表控件。图表类型是饼图。我面临一个奇怪的问题,即图例中显示的项目数是存在的系列数的平方。这意味着如果我将 2 个系列添加到饼图,则图例中将显示 4 个项目;如果我将 7 个系列添加到饼图,则图例中将显示 49 个项目。第一组 7 项显示正确数据,其他项仅显示 0。
这是我的图表控件在 ASPX 中的标记 -
<asp:Chart runat="server" ID="chartX" CssClass="chart" Width="420px" Height="500px" ImageType="Jpeg">
<Series></Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1"></asp:ChartArea>
</ChartAreas>
<Legends>
<asp:Legend Docking="Bottom" Alignment="Center" Font="Calibri"></asp:Legend>
</Legends>
</asp:Chart>
这是在 ASPX.vb 中填充图表控件的代码 -
Dim table As DataTable = PopulateData()
Dim dv As DataView = New DataView(table, "Count > 0", "", DataViewRowState.OriginalRows)
For Each r As DataRow In dv.ToTable().Rows
Dim series As String = r("Name").ToString()
chartX.Series.Add(series)
chartX.Series(series).ChartType = DataVisualization.Charting.SeriesChartType.Pie
chartX.Series(series).XValueMember = "Name"
chartX.Series(series).YValueMembers = "Count"
chartX.ChartAreas(0).Area3DStyle.Enable3D = True
chartX.Series(series).Label = "#VALX" & Environment.NewLine & "(#PERCENT)"
chartX.Series(series)("PieLabelStyle") = "Disabled"
Next
chartX.DataSource = dv
chartX.DataBind()
希望得到任何答案。
如果我没记错的话,您正在为 table 中的每一行添加一个新系列。相反,您应该为 table 添加一次系列,然后绑定您的数据。
设置图表时不需要遍历所有行。仅执行一次绑定到 table。我从没碰过 VB,但它看起来应该是这样的
Dim table As DataTable = PopulateData()
Dim dv As DataView = New DataView(table, "Count > 0", "", DataViewRowState.OriginalRows)
' setup just once
Dim series As String = "Series Name"
chartX.Series.Add(series)
chartX.Series(series).ChartType = DataVisualization.Charting.SeriesChartType.Pie
chartX.Series(series).XValueMember = "Name"
chartX.Series(series).YValueMembers = "Count"
chartX.ChartAreas(0).Area3DStyle.Enable3D = True
chartX.Series(series).Label = "#VALX" & Environment.NewLine & "(#PERCENT)"
chartX.Series(series)("PieLabelStyle") = "Disabled"
' bind to the entire set
chartX.DataSource = dv
chartX.DataBind()
我在 ASP.Net 中使用 VB.Net 使用 MS 图表控件。图表类型是饼图。我面临一个奇怪的问题,即图例中显示的项目数是存在的系列数的平方。这意味着如果我将 2 个系列添加到饼图,则图例中将显示 4 个项目;如果我将 7 个系列添加到饼图,则图例中将显示 49 个项目。第一组 7 项显示正确数据,其他项仅显示 0。
这是我的图表控件在 ASPX 中的标记 -
<asp:Chart runat="server" ID="chartX" CssClass="chart" Width="420px" Height="500px" ImageType="Jpeg">
<Series></Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1"></asp:ChartArea>
</ChartAreas>
<Legends>
<asp:Legend Docking="Bottom" Alignment="Center" Font="Calibri"></asp:Legend>
</Legends>
</asp:Chart>
这是在 ASPX.vb 中填充图表控件的代码 -
Dim table As DataTable = PopulateData()
Dim dv As DataView = New DataView(table, "Count > 0", "", DataViewRowState.OriginalRows)
For Each r As DataRow In dv.ToTable().Rows
Dim series As String = r("Name").ToString()
chartX.Series.Add(series)
chartX.Series(series).ChartType = DataVisualization.Charting.SeriesChartType.Pie
chartX.Series(series).XValueMember = "Name"
chartX.Series(series).YValueMembers = "Count"
chartX.ChartAreas(0).Area3DStyle.Enable3D = True
chartX.Series(series).Label = "#VALX" & Environment.NewLine & "(#PERCENT)"
chartX.Series(series)("PieLabelStyle") = "Disabled"
Next
chartX.DataSource = dv
chartX.DataBind()
希望得到任何答案。
如果我没记错的话,您正在为 table 中的每一行添加一个新系列。相反,您应该为 table 添加一次系列,然后绑定您的数据。
设置图表时不需要遍历所有行。仅执行一次绑定到 table。我从没碰过 VB,但它看起来应该是这样的
Dim table As DataTable = PopulateData()
Dim dv As DataView = New DataView(table, "Count > 0", "", DataViewRowState.OriginalRows)
' setup just once
Dim series As String = "Series Name"
chartX.Series.Add(series)
chartX.Series(series).ChartType = DataVisualization.Charting.SeriesChartType.Pie
chartX.Series(series).XValueMember = "Name"
chartX.Series(series).YValueMembers = "Count"
chartX.ChartAreas(0).Area3DStyle.Enable3D = True
chartX.Series(series).Label = "#VALX" & Environment.NewLine & "(#PERCENT)"
chartX.Series(series)("PieLabelStyle") = "Disabled"
' bind to the entire set
chartX.DataSource = dv
chartX.DataBind()