예제 #1
0
        /// <summary>
        /// Populate all series with data.
        /// </summary>
        public void PopulateSeries()
        {
            bool LeftAxisUsed   = false;
            bool RightAxisUsed  = false;
            bool BottomAxisUsed = false;
            bool TopAxisUsed    = false;
            int  SeriesIndex    = 1;

            foreach (Series S in Chart.Series)
            {
                if (S.HorizAxis == HorizontalAxis.Bottom)
                {
                    BottomAxisUsed = true;
                }
                else
                {
                    TopAxisUsed = true;
                }

                if (S.VertAxis == VerticalAxis.Left)
                {
                    LeftAxisUsed = true;
                }
                else
                {
                    RightAxisUsed = true;
                }

                // Read in XML about this series.
                XmlDocument Doc = new XmlDocument();
                Doc.LoadXml(S.ValuesLists[0].DataMember);
                string        DataSource  = XmlHelper.Value(Doc.DocumentElement, "DataSource");
                List <string> ColumnNames = new List <string>();
                ColumnNames.Add(XmlHelper.Value(Doc.DocumentElement, "X"));
                ColumnNames.Add(XmlHelper.Value(Doc.DocumentElement, "Y"));
                ColumnNames.Add(XmlHelper.Value(Doc.DocumentElement, "Y2"));
                ColumnNames.Add(XmlHelper.Value(Doc.DocumentElement, "Y3"));
                ColumnNames.Add(XmlHelper.Value(Doc.DocumentElement, "Y4"));
                DataTable Table = GetDataSourceWithName(DataSource);

                for (int i = 0; i < S.ValuesLists.Count; i++)
                {
                    S.ValuesLists[i].Clear();
                    if (Table != null && i < ColumnNames.Count)
                    {
                        string ColumnName = ColumnNames[i];
                        if (Table.Columns.Contains(ColumnName))
                        {
                            if (i == 0 && Table.Columns[ColumnName].DataType == typeof(string))
                            {
                                S.Labels.Clear();
                                S.Labels.AddRange(DataTableUtility.GetColumnAsStrings(Table, ColumnName));
                            }

                            else if (Table.Columns[ColumnName].DataType == typeof(double) ||
                                     Table.Columns[ColumnName].DataType == typeof(float))
                            {
                                S.ValuesLists[i].Value = DataTableUtility.GetColumnAsDoubles(Table, ColumnName);
                                S.ValuesLists[i].Count = S.ValuesLists[i].Value.Length;
                            }
                            else if (Table.Columns[ColumnName].DataType == typeof(DateTime))
                            {
                                DateTime[] Dates  = DataTableUtility.GetColumnAsDates(Table, ColumnName);
                                double[]   Values = new double[Dates.Length];
                                for (int j = 0; j < Values.Length; j++)
                                {
                                    Values[j] = Dates[j].ToOADate();
                                }
                                S.ValuesLists[i].Value    = Values;
                                S.ValuesLists[i].Count    = S.ValuesLists[i].Value.Length;
                                S.ValuesLists[i].DateTime = true;
                            }
                        }
                        else
                        {
                            S.ValuesLists[i].Value = MathUtility.CreateArrayOfValues(SeriesIndex, Table.Rows.Count);
                            S.ValuesLists[i].Count = S.ValuesLists[i].Value.Length;
                            SeriesIndex++;
                        }
                    }
                }

                // Strip out missing values.
                StripOutMissingValues(S);

                Chart.Axes.Left.Visible   = LeftAxisUsed;
                Chart.Axes.Right.Visible  = RightAxisUsed;
                Chart.Axes.Top.Visible    = TopAxisUsed;
                Chart.Axes.Bottom.Visible = BottomAxisUsed;
            }
        }