This is a migrated thread and some comments may be shown as answers.

How to bind multiple column RadChart

1 Answer 237 Views
Chart (obsolete as of Q1 2013)
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Projects Computerra
Top achievements
Rank 1
Projects Computerra asked on 05 Oct 2009, 12:36 PM
Hello,

Please refer uploaded images. SampleData is the datatable which I am binding with the control. TelerikReport.jpg is shows my program result(for which I have doubt). CrystalReport.jpg displays my needed result(I have made this chart using crystal report).

Now, let me describe my doubt. I want to display category on x-axis and incidents on y-axis. I want to display multiple category on x-axis with different colors and its incidents on y-axis(want grouping of category on x-axis and want to display incidents on y-axis same like crystalreport.jpg).

See my code,
RadChart1.DataSource = dt  
RadChart1.DataGroupColumn = "Month" 
RadChart1.PlotArea.XAxis.DataLabelsColumn = "Category" 
RadChart1.DataBind() 

I think I am missing something in code. Please guide me.

1 Answer, 1 is accepted

Sort by
0
Accepted
Dwight
Telerik team
answered on 06 Oct 2009, 07:42 AM
Hi,

The RadChart for WinForms does not allow string values for the X axis. In order to achieve the required functionality, you need to add unique numeric (double, int, etc.) value for each category, as additional data to each row.

In the following example, I have created a method Extend, to which you need to pass the DataTable, the category column and a name for the new numeric column. This method extracts the unique values from the category column and fills in the new numeric column with respective values. Once this is done, through the DataManager specify this column to be used for the X Values. Also, specify which columns are to be used for the generation of series (ValueYColumns). Here is the sample:
public partial class Form1 : Form 
    public Form1() 
    { 
        InitializeComponent(); 
 
        DataTable table = MyDataSource.Create(); ; 
        MyDataSource.Extend(table, "Category""CategoryNum"); 
 
        this.radChart1.DataSource = table; 
        this.radChart1.DataGroupColumn = "Month"
        this.radChart1.DataManager.ValuesYColumns = new string[] { "Incident" }; 
        this.radChart1.DataManager.ValuesXColumn = "CategoryNum"
        this.radChart1.PlotArea.XAxis.DataLabelsColumn = "Category"
 
        radChart1.DataBind(); 
    } 
 
public static class MyDataSource 
    public static DataTable Create() 
    { 
        DataTable table = new DataTable(); 
        table.Columns.Add("Category"typeof(string)); 
        table.Columns.Add("Month"typeof(string)); 
        table.Columns.Add("Incident"typeof(int)); 
 
        table.Rows.Add(CreateRow(table.NewRow(), "11D", 3, 4)); 
        table.Rows.Add(CreateRow(table.NewRow(), "13A", 3, 8)); 
        table.Rows.Add(CreateRow(table.NewRow(), "13B", 2, 7)); 
        table.Rows.Add(CreateRow(table.NewRow(), "13B", 3, 71)); 
        table.Rows.Add(CreateRow(table.NewRow(), "13C", 2, 8)); 
        table.Rows.Add(CreateRow(table.NewRow(), "13C", 3, 16)); 
        table.Rows.Add(CreateRow(table.NewRow(), "220", 2, 13)); 
        table.Rows.Add(CreateRow(table.NewRow(), "220", 3, 40)); 
        table.Rows.Add(CreateRow(table.NewRow(), "23C", 2, 3)); 
        table.Rows.Add(CreateRow(table.NewRow(), "23C", 3, 10)); 
 
        return table; 
    } 
 
    public static void Extend(DataTable table, string column, string newColumn) 
    { 
        List<object> uniqueValues = RetrieveUniqueValues(table, column); 
        uniqueValues.Sort(); 
 
        DataColumn newDataColumn = table.Columns.Add(newColumn, typeof(int)); 
 
        foreach (DataRow row in table.Rows) 
            row[newDataColumn] = uniqueValues.IndexOf(row[column]) + 1; 
    } 
 
    private static List<object> RetrieveUniqueValues(DataTable table, string column) 
    { 
        List<object> uniqueValues = new List<object>(); 
 
        foreach (DataRow row in table.Rows) 
        { 
            object value = row[column]; 
            if (!uniqueValues.Contains(value)) 
                uniqueValues.Add(value); 
        } 
 
        return uniqueValues; 
    } 
 
    private static DataRow CreateRow(DataRow dataRow, params object[] parameters) 
    { 
        for (int i = 0; i < parameters.Length; i++) 
            dataRow[i] = parameters[i]; 
         
        return dataRow; 
    } 

Feel free to use and modify the provided code. Also, let me know if you need further assistance.

Best wishes,
Evtim
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Tags
Chart (obsolete as of Q1 2013)
Asked by
Projects Computerra
Top achievements
Rank 1
Answers by
Dwight
Telerik team
Share this question
or