RadChart X-Axis Label Removing Leading Zeros

7 posts, 0 answers
  1. Doug
    Doug avatar
    10 posts
    Member since:
    Dec 2011

    Posted 22 Mar 2012 Link to this post

    I am binding a chart to a data table at run time. This works great. However, if there are leading zeros in the x-axis labels they are removed automatically. How can I retain leading zeros in the x-axis labels?
  2. Petar Marchev
    Admin
    Petar Marchev avatar
    968 posts

    Posted 23 Mar 2012 Link to this post

    Hi Doug,

    Have you set a custom string format?
    radChart1.PlotArea.XAxis.Appearance.CustomFormat = "000";

    Kind regards,
    Petar Marchev
    the Telerik team
    RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Doug
    Doug avatar
    10 posts
    Member since:
    Dec 2011

    Posted 23 Mar 2012 Link to this post

    Thanks for the quick reply.

    However, I am not sure that will work in this situation.  I allow the user to refresh the charts at run time and it is possible that the values used for the X-Axis labels will change in type as the datasource changes.  I need the X-Axis labels to display the exact data to which they're binded each time the datasource changes whether the value is a string or numeric.

    For example, the original source for the X-Axis labels may contain the following values:
    Exceptions, Successful, Failed

    Once the user makes some selections and refreshes the charts the X-Axis labels in the same charts may contain the following values:
    0900, 0007, 0030

    Is it possible to simply display the labels exactly as I listed them above each time the charts are refreshed?

    Currently, I am setting the chart's datasource and using .DataBind() to refresh them at run time.
  5. Petar Marchev
    Admin
    Petar Marchev avatar
    968 posts

    Posted 26 Mar 2012 Link to this post

    Hi Doug,

    I understand why the suggested approach would not work. Unfortunately the chart tries to interpret the incoming values as numbers and this is why I will have to suggest another work around.

    In essence - you might need to prepend a symbol (for instance "x") to all values in your source:
    xExceptions, xSuccessful, xFailed, x0900, x0007, x0030
    and later (in the BeforeLayout event of the chart) remove the first letter from each axis' text block:
    void radChart1_BeforeLayout(object sender, EventArgs e)
    {
      foreach (var axisItem in this.radChart1.PlotArea.XAxis.Items)
      {
        axisItem.TextBlock.Text = axisItem.TextBlock.Text.Remove(0, 1);
      }
    }

    Now the output should be as you expect.

    I am not sure how you are binding the chart but you may also use the DataBinding event of the chart to prepend the "x" symbol to all values.
    void radChart1_DataBinding(object sender, EventArgs e)
    {
      var radChart = sender as RadChart;
      var dataTable = radChart.DataSource as DataTable;
     
      foreach (DataRow row in dataTable.Rows)
      {
        row["x_column"] = "x" + row["x_column"];
      }
    }

    Hope this helps.

    Regards,
    Petar Marchev
    the Telerik team
    RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
  6. Doug
    Doug avatar
    10 posts
    Member since:
    Dec 2011

    Posted 04 Apr 2012 Link to this post

    I apologize for the delayed response.

    I used the approach you suggested, prefixing x during the DataBinding event and removing it during the BeforeLayout event. I stepped through it using the debugger and it seemed to be working correctly. However, once the chart displayed all of the x axis values had been replaced with consecutive numbers (1, 2, 3, 4, etc.). Do you know why this would occur? Is there a particular setting or property that I might be overlooking that would cause this?

    I am currently using the approach shown below after binding the chart to its datasource and it is working. I found something similar in an older post (for an older version of Telerik) and was able to modify it to fit my situation.

    chart.DataSource = null;
    chart.DataSource = dataTable;
    chart.DataBind();
      
    chart.PlotArea.XAxis.AutoScale = false;
    chart.PlotArea.XAxis.Items.Clear();
      
    for (int i = 0; i < dataTable.Rows.Count; i++)
    {
       //CURRENT_FIELD is a constant string holding the appropriate column name
       ChartAxisItem axisItem = new ChartAxisItem(dataTable.Rows[i][CURRENT_FIELD].ToString());
       chart.PlotArea.XAxis.Items.Add(axisItem);
    }
  7. Petar Marchev
    Admin
    Petar Marchev avatar
    968 posts

    Posted 06 Apr 2012 Link to this post

    Hello Doug,

    It does not occur to me why you get consecutive numbers (1, 2, 3, 4..).

    I have attached a simple project that demonstrates the previously suggested approach. When I run it - I do get, as expected, labels in the X axis: 001, 03, 00000, 00043300. You can test it and see if you get the same results. Is it possible that you have made some other settings to the chart which get in the way of this approach? Or may be you have attached a handler to some other event that is executed later and it wipes out the labels of the X axis.

    If you keep having issues with this, and if your current solution is not a feasible one - you can send us a simple project that demonstrates this, so we can investigate and look for other ways to achieve the final results.  

    Greetings,
    Petar Marchev
    the Telerik team
    RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
  8. DroidSlave
    DroidSlave avatar
    5 posts
    Member since:
    Sep 2012

    Posted 07 Sep 2012 Link to this post

    I don't know if anyone was able to get the proposed solution working or not but I was able to come up with a working solution using one of the methods stated here, but needed to use ItemDataBound event to prepend the string value to the field.

    This block of code prepends the field with an apostrophe and removes it for the legend:
    protected void rcEncounterDetail_ItemDataBound(object sender, ChartItemDataBoundEventArgs e)
    {
        ((DataRowView)e.DataItem)["Name"] = "'" + ((DataRowView)e.DataItem)["Name"];
        e.SeriesItem.Name = ((DataRowView)e.DataItem)["Name"].ToString().Remove(0, 1);
        e.SeriesItem.Label.TextBlock.Text = rbShowMoney.Checked ? "#Y{C}" : "#Y";
    }

    This block removes the apostrophe for the X-Axis label:
    protected void rcEncounterDetail_BeforeLayout(object sender, EventArgs e)
    {
        foreach (var axisItem in rcEncounterDetail.PlotArea.XAxis.Items)
        {
            axisItem.TextBlock.Text = axisItem.TextBlock.Text.Remove(0, 1);
        }
    }

    This works perfectly in our environment the leading zeros are preserved and displayed on both the legend and the X-Axis.
Back to Top
UI for WinForms is Visual Studio 2017 Ready