0

I want to add custom label something like that ( Category 1 and Category 2 ) but not getting idea whether I need to add new series or using custom label function.. Any help would be much appreciated.

enter image description here

Here is my Data Table,

    DataTable dt = new DataTable();

    DataColumn dc;

    dc = new DataColumn();
    dc.ColumnName = "Question";
    dt.Columns.Add(dc);

    dc = new DataColumn();
    dc.ColumnName = "Section";
    dt.Columns.Add(dc);

    dc = new DataColumn();
    dc.ColumnName = "User1";
    dt.Columns.Add(dc);

    dc = new DataColumn();
    dc.ColumnName = "User2";
    dt.Columns.Add(dc);


    DataRow dr;
    dr = dt.NewRow();

    dr["Question"] = "A";
    dr["Section"] = "Category 1";
    dr["User1"] = "1";
    dr["User2"] = "2";

    dt.Rows.Add(dr);

    dr = dt.NewRow();

    dr["Question"] = "B";
    dr["Section"] = "Category 1";
    dr["User1"] = "4";
    dr["User2"] = "5";


    dt.Rows.Add(dr);

    dr = dt.NewRow();

    dr["Question"] = "C";
    dr["Section"] = "Category 1";
    dr["User1"] = "2";
    dr["User2"] = "5";

    dt.Rows.Add(dr);

    dr = dt.NewRow();

    dr["Question"] = "X";
    dr["Section"] = "Category 2";
    dr["User1"] = "3";
    dr["User2"] = "5";

    dt.Rows.Add(dr);

    dr = dt.NewRow();

    dr["Question"] = "Y";
    dr["Section"] = "Category 2";
    dr["User1"] = "5";
    dr["User2"] = "1";

    dt.Rows.Add(dr);

    dr = dt.NewRow();

    dr["Question"] = "Z";
    dr["Section"] = "Category 2";
    dr["User1"] = "6";
    dr["User2"] = "5";


    dt.Rows.Add(dr);

My Chart plotting code,

    Series Series = new Series("Series1");
    Chart4.Series.Add("Series1");
    Chart4.Series.Add("Series2");

    Chart4.ChartAreas.Add("ChartArea1");

    // Set series chart type
    Chart4.Series["Series1"].ChartType = SeriesChartType.Bar;
    Chart4.Series["Series2"].ChartType = SeriesChartType.Bar;

    // Draw as 3D Cylinder
    Chart4.Series["Series1"]["DrawingStyle"] = "Cylinder";
    Chart4.Series["Series2"]["DrawingStyle"] = "Cylinder";

    Chart4.DataSource = dt.DefaultView;

    Chart4.ChartAreas["ChartArea1"].AxisX.Interval = 1;

    Chart4.Series["Series1"].XValueMember = "Question";
    Chart4.Series["Series1"].YValueMembers = "User1";
    Chart4.Series["Series2"].YValueMembers = "User2";

    Chart4.DataBind();

Solution

            DataTable dt = new DataTable();

            DataColumn dc;

            dt.Columns.Add("Id", typeof(int));

            dc = new DataColumn();
            dc.ColumnName = "Question";
            dt.Columns.Add(dc);

            dc = new DataColumn();
            dc.ColumnName = "Section";
            dt.Columns.Add(dc);

            dc = new DataColumn();
            dc.ColumnName = "User1";
            dt.Columns.Add(dc);

            DataRow dr;

            dr = dt.NewRow();

            dr["Question"] = "AA";
            dr["Id"] = 1;
            dr["Section"] = "Category1";
            dr["User1"] = "6";

            dt.Rows.Add(dr);

            dr = dt.NewRow();

            dr["Question"] = "BB";
            dr["Id"] = 2;
            dr["Section"] = "Category1";
            dr["User1"] = "1";

            dt.Rows.Add(dr);


            dr = dt.NewRow();

            dr["Question"] = "XX";
            dr["Id"] = 3;
            dr["Section"] = "Category2";
            dr["User1"] = "3";

            dt.Rows.Add(dr);

            dr = dt.NewRow();

            dr["Question"] = "YY";
            dr["Id"] = 4;
            dr["Section"] = "Category2";
            dr["User1"] = "4";

            dt.Rows.Add(dr);

            dr = dt.NewRow();

            dr["Question"] = "ZZ";
            dr["Id"] = 5;
            dr["Section"] = "Category2";
            dr["User1"] = "2";

            dt.Rows.Add(dr);

            Series Series = new Series("Series1");
            Chart4.Series.Add("Series1");

            Chart4.ChartAreas.Add("ChartArea1");

            Chart4.Series["Series1"].ChartType = SeriesChartType.Bar;

            Chart4.Series["Series1"]["BarLabelStyle"] = "Center";

            Chart4.Series["Series1"]["DrawingStyle"] = "Cylinder";

            Chart4.Series["Series1"].XValueMember = "Question";

            Chart4.Series["Series1"].YValueMembers = "User1";

            Chart4.DataSource = dt;
            Chart4.DataBind();

            foreach (var g in dt.AsEnumerable().GroupBy(x => x.Field<string>("Section")))
            {
                string section = g.Key;
                var questions = g.Select(r => new { Id = r.Field<int>("Id"), Question = r.Field<string>("Question") });
                int min = questions.Min(y => y.Id);
                int max = questions.Max(y => y.Id);

                var sectionlabel=new CustomLabel();
                if (min == max)
                {
                    sectionlabel = new CustomLabel(min - 0.5, max + 0.5, section, 1, LabelMarkStyle.LineSideMark);
                }
                else
                {
                     sectionlabel = new CustomLabel(min, max, section, 1, LabelMarkStyle.LineSideMark);
                }
                Chart4.ChartAreas[0].AxisX.CustomLabels.Add(sectionlabel);

            }

            Chart4.ChartAreas["ChartArea1"].AxisX.Interval = 1;
4

2 回答 2

2

你试过这个吗?它将为项目 1-3 创建一个组标签。

Chart4.ChartAreas["ChartArea1"].AxisX.CustomLabels.Add(1, 3, "Category 1", 1, LabelMarkStyle.LineSideMark);
于 2014-09-12T05:16:25.667 回答
1

最简单的方法是在图表中添加注释

TextAnnotation text = new TextAnnotation();
text.Text = 'Category 1';
text.X = 20;
text.Y = 20;
Chart4.Annotations.Add(text);

您还可以使用 LineAnnotation 绘制线条

http://msdn.microsoft.com/en-us/library/dd456725.aspx

于 2013-04-05T20:38:05.660 回答