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

RadChart X-Axis Label Removing Leading Zeros

6 Answers 147 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.
Doug
Top achievements
Rank 1
Doug asked on 22 Mar 2012, 10:26 PM
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?

6 Answers, 1 is accepted

Sort by
0
Petar Marchev
Telerik team
answered on 23 Mar 2012, 12:57 PM
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 >>
0
Doug
Top achievements
Rank 1
answered on 23 Mar 2012, 06:17 PM
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.
0
Petar Marchev
Telerik team
answered on 26 Mar 2012, 02:18 PM
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 >>
0
Doug
Top achievements
Rank 1
answered on 04 Apr 2012, 05:31 PM
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);
}
0
Petar Marchev
Telerik team
answered on 06 Apr 2012, 09:35 AM
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 >>
0
DroidSlave
Top achievements
Rank 2
answered on 07 Sep 2012, 05:24 PM
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.
Tags
Chart (obsolete as of Q1 2013)
Asked by
Doug
Top achievements
Rank 1
Answers by
Petar Marchev
Telerik team
Doug
Top achievements
Rank 1
DroidSlave
Top achievements
Rank 2
Share this question
or