Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF Toolkit Charts: Nullable object must have a value / 1 сообщений из 1, страница 1 из 1
19.03.2010, 11:01
    #36530233
Daniel.Lavrushin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF Toolkit Charts: Nullable object must have a value
Здравствуйте,

использую WPF+ .NET3.5+WPF Toolkit Charts

Пытаюсь программно добавить точки на график LinesChart, получаю ошибку
Nullable object must have a value

Вот код заполнения точек на графике (они берутся из DataSet)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 ObservableCollection<VelChartPoint> points = new ObservableCollection<VelChartPoint>();

foreach (DataRow dr in dc.Tables[ 0 ].Rows)
                {
                     points.Add(new VelChartPoint()
                    {
                             Name = dr.Field<string>( 0 ),
                             Value = (double)(dr.Field<int>( 1 ))
                    });

                }


Класс VelChartPoint
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 public class VelChartPoint : VelObject, INotifyPropertyChanged {

        public DateTime Date
        {
            get;
            set;
        }

        public string Label
        {
            get;
            set;
        }

        private double _Value;
        public double Value
        {
            get {
                return _Value;
            }
            set {
            
                    _Value = value;
              
                var handler = PropertyChanged;
                if (null != handler)
                {
                    handler.Invoke(this, new PropertyChangedEventArgs("Value"));
                }
            }
        }

        public string FieldName
        {
            get;
            set;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public VelChartPoint() { }
    
    }

Скажу, что ошибку вызывает именно цикл и присвоение
Label = dr[labelid].ToString()
Скажем, если поставить Label = "2010" и запустить в цикле, то все работает как надо (ну за исключением, что график ставит точки по одной оси, но ставит же...). Также не могу понять, откуда он берет нулевое значение, все данные не равны нулю.

Я понимаю, что проблема какая-то пустяковая, но не могу понять, что ее вызывает.


Вот что еще нашел.
Такой пример успешно создает точки на графике
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
foreach (DataRow dr in dc.Tables[ 0 ].Rows)
                 {
                     
                         points.Add(new VelChartPoint
                         {
                             Name = dr.Field<string>( 0 ),
                             Value = (double)(dr.Field<int>( 1 ))
                         });

                        MessageBox.Show("point added.");
                 }
т. е. если убрать MessageBox, то возникает исключение.
из-за паузы что ли? Может он не успевает что-то сделать?


Вот полный код программы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
 CompanyApi VelWb; //Веб служба на сервере, которая отдает Датасеты
        public VelChartPoints points; // точки ObservableCollection<VelChartPoint>
        DataSet dc; // датасет
        public CompanyStatisticsWindow()
        {
            InitializeComponent();

            points = this.Resources["VelChartPoints"] as VelChartPoints;

        }



        private void Window_Loaded(object sender, RoutedEventArgs e)
        {


            Thread thrloadcharts = new Thread(LoadCharts);
            thrloadcharts.Start();

        }

        private void LoadCharts()
        {


            VelWb = new CompanyApi ();
            VelWb.UseDefaultCredentials = true;
            VelWb.Credentials = CredentialCache.DefaultNetworkCredentials;
            VelWb.Url = VelGlobal.LoadedSettings.WebService;

            dc = VelWb.Analytics_SalesProdGroupsbyCustomer("235000405", "235000405");
            InsertDatatoLineChartFirstTab(chart1);

        }

        private void InsertDatatoLineChartFirstTab(Chart chart)
        {

             double maxvalue =  0 . 0 ;
           
             this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
             {

                 foreach (DataRow dr in dc.Tables[ 0 ].Rows)
                 {
                     
                         points.Add(new VelChartPoint
                         {
                             Name = dr.Field<string>( 0 ),
                             Value = (double)(dr.Field<int>( 1 ))
                         });


                         maxvalue = Math.Max(maxvalue, (double)(dr.Field<int>( 1 )));
                         MessageBox.Show("point added.");
                 }
                

                 LinearAxis axis = chart.Axes[ 1 ] as LinearAxis;

                 axis.SetValue(LinearAxis.MaximumProperty, (maxvalue + (maxvalue /  4 )));
             });
        }


Сильно не ругайте, WPF только начинаю осваивать. Помогите, пожалуйста.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF Toolkit Charts: Nullable object must have a value / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]