与MS.NET饼图中使用MS Chart Control出现的传奇项目相比,Series中的项目数大n倍

问题描述 投票:1回答:1

我正在使用VB.Net在ASP.Net中使用MS Chart Control。图表类型为饼图。我面临一个奇怪的问题,其中图例中显示的项目数是存在的系列数的平方。这意味着如果我在饼图中添加了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()

希望得到任何答案。

asp.net vb.net charts pie-chart mschart
1个回答
1
投票

如果我没记错的话,您将为表中的每一行添加一个新系列。相反,您应该为表添加一次序列,然后绑定数据。

设置图表时,您不需要遍历所有行。仅绑定到表一次。我从不接触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()

0
投票

我的问题与上述相同,但在asp.net中。我正在分享我的尝试代码。你能帮我吗?

foreach (DataRow row in ds.Tables[0].Rows)
            {
                // For each Row add a new series
                string seriesName = row["finyear"].ToString();
                PieChart.Series.Add(seriesName);
                PieChart.Series[seriesName].ChartType = SeriesChartType.Pie;
                PieChart.Series[seriesName].BorderWidth = 2;
                int i = 0;
                string[] columnName1 = new string[20];
                for (int colIndex = 1; colIndex < ds.Tables[0].Columns.Count; colIndex++)
                {
                    // For each column (column 1 and onward) add the value as a point
                    string columnName = ds.Tables[0].Columns[colIndex].ColumnName;
                    int YVal = Convert.ToInt32(row[columnName]);
                    PieChart.Series[seriesName].Points.AddXY(columnName, YVal);
                    PieChart.Series[seriesName]["PieLabelStyle"] = "Outside";
                    PieChart.ChartAreas[0].Area3DStyle.Enable3D = true;
                    PieChart.ChartAreas[0].Area3DStyle.Inclination = 40;

                    **PieChart.Series[colIndex].LegendText = ds.Tables[0].Columns[colIndex].ColumnName;**

                    foreach (Series charts in BarChart.Series)
                    {
                        columnName1[i] = ds.Tables[0].Columns[colIndex].ColumnName; 
                        PieChart.Series[colIndex].ToolTip = columnName1[i] + ":  " + "#VALY";
                    }
                    i++;
                }
            }
            PieChart.Legends[0].Enabled = true;

错误:索引超出范围。必须为非负数,并且小于集合的大小。

© www.soinside.com 2019 - 2024. All rights reserved.