数据绑定堆叠柱形图中的多个系列

时间:2012-06-07 19:15:34

标签: .net stacked

当我在堆叠的库仑图中绑定多个系列的数据时,只有第一个系列是
      用数据显示其他系列没有显示.i遍历系列并添加点       toseries动态,但问题仍然存在。我也设置isshowedaslabel
       财产到真,但问题是没有,请帮助我     

aspx代码:                                                                     

                 XValueMember="qno"   YValueMembers="option3" ></asp:Series>
                        <asp:Series Name="Series2" ChartType="StackedColumn"   

                   XValueMember="description" YValueMembers="option3"></asp:Series>
                            <asp:Series Name="Series3" ChartType="StackedColumn" 

                      XValueMember="option1" YValueMembers="option3"></asp:Series>
                                <asp:Series Name="Series4" ChartType="StackedColumn"  

                   XValueMember="description" YValueMembers="option3">   
                    </asp:Series>
                </Series

>





            <ChartAreas>
                <asp:ChartArea Name="ChartArea1">
                </asp:ChartArea>
            </ChartAreas>
        </asp:Chart>


    **.aspx.cs**
     assessdal d = new assessdal();
            SqlConnection con = dbconnect.GetConnection();

            SqlCommand cmd = new SqlCommand("select assessid, qno ,description,    
           option1,option2,option3,option4 from assessmenttest", con);
            SqlDataReader reder = cmd.ExecuteReader();








                Chart2.DataSource = d.showop1();

                Chart2.DataBind();



                Chart2.Series["Series1"].IsValueShownAsLabel = true;


                Chart2.Series["Series2"].IsValueShownAsLabel = true;
                Chart2.Series["Series3"].IsValueShownAsLabel = true;
                Chart2.Series["Series4"].IsValueShownAsLabel = true;
                while (reder.Read())
                {
                    if (reder.HasRows)
                    {

                        //Chart2.Series["Series1"].Points.DataBindY(reder, "option3");
                        //Chart2.Series["Series2"].Points.DataBindY(reder, "option3");
                        //Chart2.Series["Series3"].Points.DataBindY(reder, "option3");
                        //Chart2.Series["Series4"].Points.DataBindY(reder, "option3");
                    }
                    foreach (Series s in Chart2.Series)
                    {
                        s.Points.DataBindY(reder,"option3");
                    }




                }

2 个答案:

答案 0 :(得分:0)

我建议使用DataBindCrossTable方法将数据绑定到堆积条/堆积柱形图。看看这里的例子:

http://blogs.msdn.com/b/saveenr/archive/2012/01/25/microsoft-chart-controls-using-databindcrosstable-method-for-dynamic-series.aspx

该方法基本上对指定的列执行GROUP BY操作,并为该列中的每个不同值创建一个图表系列。

答案 1 :(得分:0)

示例@ kad81引用已移动,但未解决图表类型。根据我的经验DataBindCrossTable默认为柱形图。

以下是示例中的相关代码段,另外我在底部添加了循环来处理堆积柱形图样式。

// Setup the data
var dt = new System.Data.DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("BugCount", typeof(int));
dt.Columns.Add("Day", typeof(int));
dt.Rows.Add("Kim", 10, 0);
dt.Rows.Add("Kim", 12, 1);
dt.Rows.Add("Kim", 18, 2);
dt.Rows.Add("Kim", 5, 3);
dt.Rows.Add("Philby", 18, 0);
dt.Rows.Add("Philby", 25, 1);
dt.Rows.Add("Philby", 9, 2);
dt.Rows.Add("Philby", 32, 3);

// Build the chart
this.chart1.Series.Clear();
this.chart1.DataBindCrossTable(dt.Rows, "Name", "Day", "BugCount", "");

foreach (Series s in this.chart1.Series)
{
    s.ChartType=SeriesChartType.StackedColumn;
}