private string GetZaxisFieldValue(string sListName, SPField zAxisField, int zAxisFieldIndex, DataRow dr)
        {
            var zAxisFieldValue = "";

            if (!String.IsNullOrEmpty(PropChartZaxisField.Trim()) && !PropChartZaxisField.Contains("None Selected") &&
                dr.ItemArray.Length > zAxisFieldIndex)
            {
                zAxisFieldValue = dr.ItemArray[zAxisFieldIndex].ToString();
                if (zAxisField != null && zAxisField.InternalName.ToUpper() == "LIST")
                {
                    zAxisFieldValue = sListName;
                }
                else if (zAxisFieldValue.Length > 0 && zAxisFieldValue != "No Value")
                {
                    if (zAxisField != null)
                    {
                        if (zAxisFieldValue.Contains(";#"))
                        {
                            zAxisFieldValue = zAxisFieldValue.Substring(zAxisFieldValue.IndexOf(";#") + 2);

                            if (IsBubbleChart())
                            {
                                zAxisFieldValue = GetCleanNumberValue(zAxisFieldValue).ToString();
                            }
                        }

                        //zAxisFieldValue = zAxisField.GetFieldValueForEdit(zAxisFieldValue);
                    }
                }

                //zAxisFieldValue = GetCleanNumberValue(zAxisFieldValue).ToString();
            }
            return(zAxisFieldValue);
        }
        private void AddZAxisRowToChartDataTable(int xAxisColumnIndex, SPField xAxisField)
        {
            if ((String.IsNullOrEmpty(PropChartZaxisField.Trim()) || PropChartZaxisField.Contains("None Selected")) &&
                PropChartAggregationType.ToUpper() == "COUNT")
            {
                if (xAxisField.InternalName.ToUpper() == "LIST")
                {
                    if (!SeriesExistsInChartDataTable(xAxisField.Title))
                    {
                        AddNewRowToChartDataTable(xAxisField.Title);
                    }
                }
                else
                {
                    AddNewRowToChartDataTable(dtSPSiteDataQueryData.Columns[xAxisColumnIndex].ColumnName);
                }

                _numberOfRowsInChartDataTable++;
            }
        }
        public void DataBindChart()
        {
            LoadChartDataUsingSPSiteDataQuery();

            TraceHeader();

            try
            {
                if (_numberOfColumnsInChartDataTable > 0 && _numberOfRowsInChartDataTable > 0) // has data points
                {
                    if (IsBubbleChart())
                    {
                        Series.AddRange(BuildSeriesArrayForBubbleChart());
                    }
                    else
                    {
                        int iCol = 0;
                        var x    = new String[_numberOfColumnsInChartDataTable];
                        foreach (DataColumn col in ChartDataTable.Columns)
                        {
                            if (col.ColumnName != "SeriesName")
                            {
                                x[iCol] = col.ColumnName;
                                iCol++;
                            }
                        }

                        DataView v = ChartDataTable.DefaultView;
                        v.Sort         = "[" + ChartDataTable.Columns[0].ColumnName + "] desc";
                        ChartDataTable = v.ToTable();

                        switch (PropChartAggregationType.ToUpper())
                        {
                        case "COUNT":
                            if ((PropChartZaxisField.Trim() == "" || PropChartZaxisField.Contains("None Selected")) &&
                                _numberOfRowsInChartDataTable > 1)
                            {
                                foreach (DataRow dr in ChartDataTable.Rows)
                                {
                                    AddChartSeries(dr["SeriesName"].ToString(), PropChartAggregationType, ChartDataTable.Rows.Count, 0, false, false);
                                }
                            }
                            else
                            {
                                foreach (DataRow dr in ChartDataTable.Rows)
                                {
                                    AddChartSeries(dr["SeriesName"].ToString(), PropChartAggregationType, ChartDataTable.Rows.Count, 0, false, false);
                                }
                            }
                            break;

                        case "SUM":
                        case "AVG":
                            if ((String.IsNullOrEmpty(PropChartZaxisField.Trim()) ||
                                 PropChartZaxisField.Contains("None Selected")) && _numberOfRowsInChartDataTable > 1)
                            {
                                foreach (DataRow dr in ChartDataTable.Rows)
                                {
                                    AddChartSeries(dr["SeriesName"].ToString(), PropChartAggregationType, ChartDataTable.Rows.Count, 0, false, true);
                                }
                            }
                            else
                            {
                                foreach (DataRow dr in ChartDataTable.Rows)
                                {
                                    AddChartSeries(dr["SeriesName"].ToString(), PropChartAggregationType, ChartDataTable.Rows.Count, 0, false, true);
                                }
                            }
                            break;

                        default:
                            break;
                        }
                    }
                }
                else // no data points - show msg
                {
                    PropChartTitle = "There are no results to show in this chart.";
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
        private void SetGraphData(int idx, DataRow dataRow, string zAxisFieldValue, string xAxisFieldValue)
        {
            var fieldName       = dtSPSiteDataQueryData.Columns[idx].ColumnName;
            var yAxis           = oTopList.Fields.GetFieldByInternalName(fieldName);
            var seriesName      = yAxis.Title;
            var yAxisFieldValue = dataRow.ItemArray[idx].ToString();

            if (yAxisFieldValue.Length > 0)
            {
                if (yAxisFieldValue.Contains(";#"))
                {
                    yAxisFieldValue = GetCleanNumberValue(yAxisFieldValue.Substring(yAxisFieldValue.IndexOf(";#") + 2))
                                      .ToString();
                }
                if (string.Equals(
                        GetFieldSchemaAttribValue(yAxis.SchemaXml, "Percentage"),
                        bool.TrueString,
                        StringComparison.OrdinalIgnoreCase))
                {
                    try
                    {
                        var flTempVal = double.Parse(yAxisFieldValue, providerEn);
                        flTempVal       = flTempVal * 100;
                        yAxisFieldValue = flTempVal.ToString();
                    }
                    catch (Exception ex)
                    {
                        HandleException(ex);
                    }
                }
            }

            if (PropChartZaxisField.Trim().Length != 0 && !PropChartZaxisField.Contains("None Selected"))
            {
                if (zAxisFieldValue.Trim().Length == 0)
                {
                    zAxisFieldValue = "No Value";
                }

                if (SeriesExistsInChartDataTable(zAxisFieldValue))
                {
                    UpdateCellValue(zAxisFieldValue, xAxisFieldValue, yAxisFieldValue, PropChartAggregationType);
                    _numberOfRowsInChartDataTable++;
                }
                else
                {
                    AddNewRowToChartDataTable(zAxisFieldValue);
                    _numberOfRowsInChartDataTable++;
                    UpdateCellValue(zAxisFieldValue, xAxisFieldValue, yAxisFieldValue, PropChartAggregationType);
                }
            }
            else
            {
                if (SeriesExistsInChartDataTable(seriesName))
                {
                    UpdateCellValue(seriesName, xAxisFieldValue, yAxisFieldValue, PropChartAggregationType);
                    _numberOfRowsInChartDataTable++;
                }
                else
                {
                    AddNewRowToChartDataTable(seriesName);
                    _numberOfRowsInChartDataTable++;
                    UpdateCellValue(seriesName, xAxisFieldValue, yAxisFieldValue, PropChartAggregationType);
                }
            }
        }
        private void ProcessSiteQueryData(string sListName)
        {
            const int xAxisColumnIndex = 3;
            const int zAxisFieldIndex  = 4;

            try
            {
                var     xAxisField = oTopList.Fields.GetFieldByInternalName(PropChartXaxisField);
                SPField zAxisField = null;

                if (!PropChartZaxisField.Contains("None Selected"))
                {
                    zAxisField = oTopList.Fields.GetFieldByInternalName(PropChartZaxisField);
                }

                AddZAxisRowToChartDataTable(xAxisColumnIndex, xAxisField);

                foreach (DataRow dr in dtSPSiteDataQueryData.Rows)
                {
                    var xAxisFieldValue = GetXaxisFieldValue(sListName, xAxisField, xAxisColumnIndex, dr);
                    var zAxisFieldValue = GetZaxisFieldValue(sListName, zAxisField, zAxisFieldIndex, dr);

                    var sYaxisFldVal = "";

                    AddXAxisColumnToChartDataTableIfDoesntExist(xAxisFieldValue);

                    switch (PropChartAggregationType.ToUpper())
                    {
                    case "COUNT":
                        if (PropChartZaxisField.Trim().Length != 0 && !PropChartZaxisField.Contains("None Selected"))
                        {
                            if (zAxisFieldValue.Trim() == "")
                            {
                                zAxisFieldValue = "No Value";
                            }

                            if (SeriesExistsInChartDataTable(zAxisFieldValue))
                            {
                                UpdateCellValue(zAxisFieldValue, xAxisFieldValue, zAxisFieldValue, PropChartAggregationType);
                                _numberOfRowsInChartDataTable++;
                            }
                            else
                            {
                                AddNewRowToChartDataTable(zAxisFieldValue);
                                _numberOfRowsInChartDataTable++;
                                UpdateCellValue(zAxisFieldValue, xAxisFieldValue, zAxisFieldValue, PropChartAggregationType);
                            }
                        }
                        else
                        {
                            if (xAxisField.InternalName.ToUpper() == "LIST")
                            {
                                UpdateCellValue(xAxisField.Title, xAxisFieldValue, "1", "COUNT");
                            }
                            else
                            {
                                UpdateCellValue(dtSPSiteDataQueryData.Columns[xAxisColumnIndex].ColumnName, xAxisFieldValue, "1", "COUNT");
                            }
                            _numberOfRowsInChartDataTable++;
                        }
                        break;

                    case "SUM":
                    case "AVG":
                        if (PropChartAggregationType.ToUpper() != "SUM" && (PropChartZaxisField.Trim() != "" && !PropChartZaxisField.Contains("None Selected")))
                        {
                            if (zAxisFieldValue.Trim().Length == 0)
                            {
                                zAxisFieldValue = "No Value";
                            }

                            if (GetYFields().Length > 0)
                            {
                                if (SeriesExistsInChartDataTable(zAxisFieldValue))
                                {
                                    UpdateCellValue(zAxisFieldValue, xAxisFieldValue, sYaxisFldVal,
                                                    PropChartAggregationType);
                                    _numberOfRowsInChartDataTable++;
                                }
                                else
                                {
                                    AddNewRowToChartDataTable(zAxisFieldValue);
                                    _numberOfRowsInChartDataTable++;
                                    UpdateCellValue(zAxisFieldValue, xAxisFieldValue, sYaxisFldVal,
                                                    PropChartAggregationType);
                                }
                            }
                            else
                            {
                                if (dtSPSiteDataQueryData.Columns.Count > 5)
                                {
                                    if (
                                        SeriesExistsInChartDataTable(zAxisField.GetFieldValueAsText(dtSPSiteDataQueryData.Columns[5].ColumnName)))
                                    {
                                        UpdateCellValue(dtSPSiteDataQueryData.Columns[5].ColumnName, xAxisFieldValue,
                                                        zAxisFieldValue, PropChartAggregationType);
                                        _numberOfRowsInChartDataTable++;
                                    }
                                    else
                                    {
                                        AddNewRowToChartDataTable(dtSPSiteDataQueryData.Columns[5].ColumnName);
                                        _numberOfRowsInChartDataTable++;
                                        UpdateCellValue(dtSPSiteDataQueryData.Columns[5].ColumnName, xAxisFieldValue,
                                                        zAxisFieldValue, PropChartAggregationType);
                                    }
                                }
                                else
                                {
                                    if (dtSPSiteDataQueryData.Columns[zAxisFieldIndex].ColumnName.ToUpper() == "LIST")
                                    {
                                        if (zAxisField != null)
                                        {
                                            if (SeriesExistsInChartDataTable(zAxisField.Title))
                                            {
                                                UpdateCellValue(zAxisField.Title, xAxisFieldValue, zAxisFieldValue,
                                                                PropChartAggregationType);
                                                _numberOfRowsInChartDataTable++;
                                            }
                                            else
                                            {
                                                AddNewRowToChartDataTable(zAxisField.Title);
                                                _numberOfRowsInChartDataTable++;
                                                UpdateCellValue(zAxisField.Title, xAxisFieldValue, zAxisFieldValue,
                                                                PropChartAggregationType);
                                            }
                                        }
                                        else
                                        {
                                            if (SeriesExistsInChartDataTable("Work Type"))
                                            {
                                                UpdateCellValue("Work Type", xAxisFieldValue, zAxisFieldValue,
                                                                PropChartAggregationType);
                                                _numberOfRowsInChartDataTable++;
                                            }
                                            else
                                            {
                                                AddNewRowToChartDataTable("Work Type");
                                                _numberOfRowsInChartDataTable++;
                                                UpdateCellValue("Work Type", xAxisFieldValue, zAxisFieldValue,
                                                                PropChartAggregationType);
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        if (GetYFields().Length > 0)
                        {
                            string sSeriesName;
                            int    iStartCol;
                            if (!PropChartZaxisField.Contains("None Selected") && !IsBubbleChart())
                            {
                                iStartCol = 5;
                            }
                            else
                            {
                                iStartCol = 4;
                            }

                            SPField fldYaxis;

                            if (!IsBubbleChart())
                            {
                                for (int iSeries = iStartCol; iSeries < dtSPSiteDataQueryData.Columns.Count; iSeries++)
                                {
                                    SetGraphData(iSeries, dr, zAxisFieldValue, xAxisFieldValue);
                                }
                            }
                            else
                            {
                                SetGraphData(iStartCol, dr, zAxisFieldValue, xAxisFieldValue);
                            }
                        }
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }