Page 1 of 1
Can I setNull use other funcion ?
Posted: Thu Feb 16, 2023 11:33 am
by 15695007
Hello :
i want to show data with null, TeeChart API ,I can find the setNull(int valueIndex) function could achieve my goal.Does TeeChart has other function to do this, so i don't need to collect the null value index Array to execute SetNull api function?
Do I have to use SetNull function?
Code: Select all
list.Add(new Student("A", 10));
list.Add(new Student("B", null));
list.Add(new Student("C", 11));
list.Add(new Student("D",14));
age.Add(list as IList);
tChart1[0].SetNull(2);
(tChart1[0] as Steema.TeeChart.Styles.CustomPoint).TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint;
Re: Can I setNull use other funcion ?
Posted: Tue Feb 21, 2023 4:19 pm
by Christopher
Hello,
Do I have to use SetNull function?
Can you please post a
minimal, reproducible example (reprex) that we can copy and paste into a Windows Form and run? The example you give:
Code: Select all
list.Add(new Student("A", 10));
list.Add(new Student("B", null));
list.Add(new Student("C", 11));
list.Add(new Student("D",14));
age.Add(list as IList);
tChart1[0].SetNull(2);
(tChart1[0] as Steema.TeeChart.Styles.CustomPoint).TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint;
Is not a
reprex as I can't run it when I copy and past it into a Windows Form. Without a
reprex we also cannot understand the context in which you run your code and so cannot give you the best answer to it.
Re: Can I setNull use other funcion ?
Posted: Wed Feb 22, 2023 3:55 am
by 15695007
Hello:
Okay,the code is below
Code: Select all
public Form4()
{
InitializeComponent();
InitializeChart();
}
class Student
{
public string Name { get; set; }
public double? Value { get; set; }
public Student(string name, double? value)
{
Name = name;
Value = value;
}
}
private void InitializeChart()
{
List<Student> list = new List<Student>();
var age = new Line(tChart1.Chart);
age.YValues.DataMember = "Value";
age.LabelMember = "Name";
age.Title = "Age";
age.LinePen.Width = 3;
list.Add(new Student("A", 10));
list.Add(new Student("B", null));
list.Add(new Student("C", 11));
list.Add(new Student("D",14));
age.Add(list as IList);
(tChart1[0] as Steema.TeeChart.Styles.CustomPoint).TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint;
}
Maybe TeeChart think when value is null,then process it to 0 . Can i set it to DoNotPaint but
not use SetNull(int valueIndex) function. So I don't need know the null value is which valueIndex. I hope TeeChart can process null value automatic. Does TeeChart has which function can do it?
The below code execute result is what i expect.
Code: Select all
public Form4()
{
InitializeComponent();
InitializeChart();
}
class Student
{
public string Name { get; set; }
public double? Value { get; set; }
public Student(string name, double? value)
{
Name = name;
Value = value;
}
}
private void InitializeChart()
{
List<Student> list = new List<Student>();
var age = new Line(tChart1.Chart);
age.YValues.DataMember = "Value";
age.LabelMember = "Name";
age.Title = "Age";
age.LinePen.Width = 3;
list.Add(new Student("A", 10));
list.Add(new Student("B", null));
list.Add(new Student("C", 11));
list.Add(new Student("D",14));
age.Add(list as IList);
for (var i = 0; i < list.Count; i++)
{
if (list[i].Value is null)
{
tChart1[0].SetNull(i);
}
}
(tChart1[0] as Steema.TeeChart.Styles.CustomPoint).TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint;
}
Maybe my datalist is large, then I don't need to iterator the list can reduce the code rendering time
Do I make myself clear?
Re: Can I setNull use other funcion ?
Posted: Wed Feb 22, 2023 10:46 am
by Christopher
Hello,
I hope TeeChart can process null value automatic. Does TeeChart has which function can do it?
I think that the question you are trying to ask is: are the values that TeeChart manipulates internally
nullable value types? And the answer to this question is: no, they are not; the type that TeeChart uses internally for its data is
double, and not double?.
Maybe my datalist is large, then I don't need to iterator the list can reduce the code rendering time
Iterating the data is not a problem, as that is what TeeChart does internally anyway when you use the Add(IList list) overload.
Do I make myself clear?
Yes, thank you, being able to run a
reprex makes both the question clearer and the answer more precise.
Re: Can I setNull use other funcion ?
Posted: Wed Feb 22, 2023 11:10 am
by Christopher
Hello,
Okay, I can see your worry about the iterator, as you were interating twice in your example—to iterate only once you can use code such as the following:
Code: Select all
public Form1()
{
InitializeComponent();
InitializeChart();
}
class Student
{
public string Name { get; set; }
public double? Value { get; set; }
public Student(string name, double? value)
{
Name = name;
Value = value;
}
}
private void InitializeChart()
{
const double defaultnull = -1;
List<Student> list = new List<Student>();
var age = new Line(tChart1.Chart);
age.YValues.DataMember = "Value";
age.LabelMember = "Name";
age.Title = "Age";
age.TreatNulls = TreatNullsStyle.DoNotPaint;
age.DefaultNullValue = defaultnull;
list.Add(new Student("A", 10));
list.Add(new Student("B", null));
list.Add(new Student("C", 11));
list.Add(new Student("D", 14));
list.ForEach(x => {
if (x.Value.HasValue)
{
tChart1[0].Add(x.Value.Value, x.Name);
}
else
{
tChart1[0].Add(defaultnull, x.Name, Color.Transparent);
}
});
}