public static CellSetData Deserialize(String str)
        {
            if (!String.IsNullOrEmpty(str))
            {
                StringReader str_reader = new StringReader(str);
                XmlReader    reader     = XmlReader.Create(str_reader);

                return(CellSetData.Deserialize(reader));
            }
            else
            {
                return(null);
            }
        }
        private void AddKpiRowToStorage(CellSetData cs_descr)
        {
            if (cs_descr.Axes.Count > 0)
            {
                if (cs_descr.Cells.Count > 1 && cs_descr.Cells[0].Value != null &&
                    !m_KpiStorage.ContainsKey(cs_descr.Cells[0].Value.Value.ToString()))
                {
                    var row = new KpiView();
                    string key = cs_descr.Cells[0].Value.Value.ToString();
                    row.Caption = key;
                    double num;
                    row.KpiValue = cs_descr.Cells.Count > 1 && double.TryParse(cs_descr.Cells[1].Value.Value.ToString(), out num) ? num : double.NaN;
                    double num1;
                    row.KpiGoal = cs_descr.Cells.Count > 2 && double.TryParse(cs_descr.Cells[2].Value.Value.ToString(), out num1) ? num1 : double.NaN;
                    double num2;
                    row.KpiVariance = cs_descr.Cells.Count > 3 && double.TryParse(cs_descr.Cells[3].Value.Value.ToString(), out num2) ? num2 : double.NaN;                    
                    row.KpiStatus = cs_descr.Cells.Count > 4 ? cs_descr.Cells[4].Value.Value.ToString() : String.Empty;
                    row.KpiTrend = cs_descr.Cells.Count > 5 ? cs_descr.Cells[5].Value.Value.ToString() : String.Empty;
                    row.KpiWeight = cs_descr.Cells.Count > 6 ? cs_descr.Cells[6].Value.Value.ToString() : String.Empty;
                    m_KpiStorage.Add(key, row);
                }
            }
            if (this.RowIndex > -1)
            {
                this.RowIndex = this.ExecuteQueryForRow(++this.RowIndex);
            }            

        }
 public CellSetDataProvider(CellSetData cs_descr)
 {
     m_CellSet_Descr = cs_descr;
 }
		protected virtual void Initialize(CellSetData cs_descr)
		{
			try
			{
				Dictionary<String, SortDescriptor> axis1_sortInfo = null;
				Dictionary<String, SortDescriptor> axis0_sortInfo = null;
				if (m_CellSetProvider != null)
				{
					axis0_sortInfo = m_CellSetProvider.ColumnsSortInfo;
					axis1_sortInfo = m_CellSetProvider.RowsSortInfo;
				}

				ResetSettings();

				IsWaiting = true;
				DateTime start = DateTime.Now;
				//System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing start: " + start.ToString());

				m_CSDescr = cs_descr;
				if (cs_descr != null)
				{
					m_CellSetProvider = new CellSetDataProvider(cs_descr, DataReorganizationType);
					if (axis0_sortInfo != null)
					{
						foreach (var hierarchyUniqueName in axis0_sortInfo.Keys)
						{
							m_CellSetProvider.Sort(0, hierarchyUniqueName, axis0_sortInfo[hierarchyUniqueName]);
						}
					}

					if (axis1_sortInfo != null)
					{
						foreach (var hierarchyUniqueName in axis1_sortInfo.Keys)
						{
							m_CellSetProvider.Sort(1, hierarchyUniqueName, axis1_sortInfo[hierarchyUniqueName]);
						}
					}
					ImportSizeInfo();
				}

				PivotGrid.Initialize(m_CellSetProvider);
				UpdateButtons();

				DateTime stop = DateTime.Now;
				//System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing stop: " + stop.ToString());
				System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing time: " + (stop - start).ToString());
			}
			finally
			{
				IsWaiting = false;
			}
		}
 void OnDatesLoaded(CellSetData cs_descr)
 {
     m_LoadedMembers.Clear();
     if (cs_descr.Axes.Count > 0)
     {
         foreach (PositionData position in cs_descr.Axes[0].Positions)
         {
             if (position.Members.Count > 0)
             {
                 if (!m_LoadedMembers.ContainsKey(cs_descr.Axes[0].Members[position.Members[0].Id].UniqueName))
                     m_LoadedMembers.Add(cs_descr.Axes[0].Members[position.Members[0].Id].UniqueName, cs_descr.Axes[0].Members[position.Members[0].Id]);
             }
         }
     }
 }
        private List<MemberDataWrapper> GetMembers(CellSetData cs_descr)
        {
            List<MemberDataWrapper> result = new List<MemberDataWrapper>();
            if (cs_descr != null)
            {
                // Сами элементы - по оси 0
                // По оси 1 - св-ва элементов
                if (cs_descr.Axes.Count > 0)
                {
                    int colIndex = 0;
                    foreach (PositionData posColumn in cs_descr.Axes[0].Positions)
                    {
                        if (posColumn.Members.Count > 0)
                        {
                            MemberDataWrapper wrapper = new MemberDataWrapper(cs_descr.Axes[0].Members[posColumn.Members[0].Id]);

                            if (cs_descr.Axes.Count > 1)
                            {
                                int rowIndex = 0;
                                foreach (PositionData posRow in cs_descr.Axes[1].Positions)
                                {
                                    if (posRow.Members.Count > 0)
                                    {
                                        PropertyData prop = new PropertyData();
                                        prop.Name = cs_descr.Axes[1].Members[posRow.Members[0].Id].Caption;

                                        // Название свойства имеет специальный вид -IsDataMember-
                                        // В качестве названия будем использовать подстроку между символами "-"
                                        //String caption = posRow.Members[0].Caption;
                                        //if (caption.StartsWith("-") && caption.EndsWith("-"))
                                        //    caption = caption.Trim('-');

                                        // Если такого атрибута нет, то будет исключение
                                        CellData cell_descr = null;
                                        try
                                        {
                                            cell_descr = cs_descr.GetCellDescription(colIndex, rowIndex);
                                        }
                                        catch (AdomdErrorResponseException)
                                        {
                                        }

                                        if (cell_descr != null && cell_descr.Value != CellValueData.Empty && !cell_descr.Value.IsError)
                                        {
                                            prop.Value = cell_descr.Value.Value;
                                            wrapper.Member.MemberProperties.Add(prop);
                                        }
                                    }
                                    rowIndex++;
                                }
                            }

                            result.Add(wrapper);
                        }
                        colIndex++;
                    }
                }
            }
            return result;
        }
 long GetCount(CellSetData cs_descr)
 {
     long result = 0;
     if (cs_descr != null)
     {
         // Сами элементы - по оси 0
         // По оси 1 - св-ва элементов
         if (cs_descr.Axes.Count > 0)
         {
             result = cs_descr.Axes[0].Positions.Count;
         }
         //// Сами элементы - по оси 0
         //// По оси 1 - св-ва элементов
         //if (cs_descr.Axes.Count == 1 && cs_descr.Axes[0].Positions.Count == 1 && cs_descr.Cells.Count == 1)
         //{
         //    if (cs_descr.Cells[0] != null && cs_descr.Cells[0].Value != null && cs_descr.Cells[0].Value.Value != null)
         //    {
         //        try
         //        {
         //            result = Convert.ToInt64(cs_descr.Cells[0].Value.Value);
         //        }
         //        catch
         //        {
         //        }
         //    }
         //}
     }
     return result;
 }
 void InitializeTuple(CellSetData cs_descr)
 {
     if (cs_descr != null)
     {
         CellSetDataProvider  cellSetProvider = new CellSetDataProvider(cs_descr);
         CellInfo cell = cellSetProvider.GetCellInfo(0, 0);
         if (cell != null)
         {
             IDictionary<String, MemberWrap> slice = new Dictionary<String, MemberWrap>();
             IDictionary<String, MemberInfo> tuple = cell.GetTuple();
             foreach (String hierarchyUniqueName in tuple.Keys)
             {
                 slice.Add(hierarchyUniqueName, new MemberWrap(tuple[hierarchyUniqueName]));
             }
             m_CopyControl.Initialize(slice);
         }
     }
 }
        internal static CellSetData Deserialize(XmlReader reader)
        {
            if (reader != null)
            {
                try
                {
                    if (!(reader.NodeType == XmlNodeType.Element &&
                          reader.Name == XML_CellSetData))
                    {
                        reader.ReadToFollowing(XML_CellSetData);
                    }

                    CellSetData target = new CellSetData();

                    // Начало - CellSetData
                    reader.ReadStartElement(XML_CellSetData);

                    var data = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray;

                    // Имя куба
                    target.CubeName = data[0] != null ? data[0].ToString() : String.Empty;

                    // Соединение
                    var connection = data.GetArray(1);
                    target.Connection.ConnectionID     = connection[0].ToString();
                    target.Connection.ConnectionString = connection[1].ToString();

                    reader.Read();

                    // Оси
                    reader.ReadStartElement("Axes");

                    var axes = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray;
                    for (int a = 0; a < axes.Count; a++)
                    {
                        var      axis_data = axes.GetArray(a);
                        AxisData axis      = new AxisData();
                        axis.AxisNum = a;
                        // Название оси
                        axis.Name = axis_data[0].ToString();
                        // Позиции
                        var positions = axis_data.GetArray(1);

                        for (int p = 0; p < positions.Count; p++)
                        {
                            var          position_data = positions.GetArray(p);
                            PositionData pos           = new PositionData();

                            for (int m = 0; m < position_data.Count; m++)
                            {
                                var member_data           = position_data.GetArray(m);
                                PositionMemberData member = new PositionMemberData(Convert.ToInt32(member_data[0]));
                                member.DrilledDown = Convert.ToBoolean(member_data[1]);
                                pos.Members.Add(member);
                            }

                            axis.Positions.Add(pos);
                        }

                        // Названаия свойств
                        var PropertiesNames = axis_data.GetArray(2);
                        // Названаия пользовательских свойств
                        var MemberPropertiesNames = axis_data.GetArray(3);
                        // Элементы оси
                        var members = axis_data.GetArray(4);

                        // Варианты стиля
                        var equalsMemberProps = axis_data.GetArray(5);
                        // Описание стиля
                        var equalsMemberPropertiesNames = axis_data.GetArray(6);

                        for (int m = 0; m < members.Count; m++)
                        {
                            var member_data             = members.GetArray(m);
                            var Settings                = member_data.GetArray(0);
                            var PropertiesValues        = member_data.GetArray(1);
                            var MemberPropertiesValues  = member_data.GetArray(2);
                            int MemberPropertiesStyleId = Convert.ToInt32(member_data[3]);

                            MemberData member = new MemberData();
                            int        x      = 0;
                            member.Caption              = Settings[x++].ToString();
                            member.Description          = Settings[x++].ToString();
                            member.Name                 = Settings[x++].ToString();
                            member.UniqueName           = Settings[x++].ToString();
                            member.ChildCount           = Convert.ToInt32(Settings[x++].ToString());
                            member.DrilledDown          = Convert.ToBoolean(Settings[x++].ToString());
                            member.LevelDepth           = Convert.ToInt32(Settings[x++].ToString());
                            member.LevelName            = Settings[x++].ToString();
                            member.HierarchyUniqueName  = Settings[x++].ToString();
                            member.ParentSameAsPrevious = Convert.ToBoolean(Settings[x++].ToString());

                            for (int j = 0; j < PropertiesValues.Length; j++)
                            {
                                member.Properties.Add(new PropertyData(PropertiesNames[j].ToString(), ConvertFromJson(PropertiesValues[j])));
                            }
                            for (int j = 0; j < MemberPropertiesValues.Length; j++)
                            {
                                member.MemberProperties.Add(new PropertyData(MemberPropertiesNames[j].ToString(), ConvertFromJson(MemberPropertiesValues[j])));
                            }

                            var member_equalsPropsValues = equalsMemberProps.GetArray(MemberPropertiesStyleId);
                            for (int k = 0; k < equalsMemberPropertiesNames.Length; k++)
                            {
                                var propName = equalsMemberPropertiesNames[k].ToString();
                                member.MemberProperties.Add(new PropertyData(propName, ConvertFromJson(member_equalsPropsValues[k])));
                            }

                            axis.Members.Add(axis.Members.Count, member);
                        }

                        target.Axes.Add(axis);
                    }

                    reader.Read();

                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Axes")
                    {
                        reader.ReadEndElement();
                    }

                    // Ячейки
                    reader.ReadStartElement("Cells");

                    var strData = reader.Value;
                    target.DeserializeData(strData);
                    reader.Read();

                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Cells")
                    {
                        reader.ReadEndElement();
                    }
                    // Конец - CellSetData
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == XML_CellSetData)
                    {
                        reader.ReadEndElement();
                    }
                    return(target);
                }
                catch (XmlException)
                {
                    throw;
                }
            }
            return(null);
        }
        public CellSetData RefreshQuery(Func<MdxObject, MdxObject> objectConsumerPattern)
        {
            CellSetData res = null;
            if (!string.IsNullOrEmpty(Query))
            {
                using (MdxDomProvider provider = MdxDomProvider.CreateProvider())
                {
                    StringBuilder sb = new StringBuilder();
                    provider.GenerateMdxFromDom(this.CreateWrappedStatement(), sb, new MdxGeneratorOptions());

                    String new_Query = sb.ToString();

                    res = ExecuteQuery(new_Query);
                    //if (!String.IsNullOrEmpty(res))
                    //{
                    //    Application[QUERY] = new_Query;
                    //}
                }
            }
            else
            { 
                // Пустой запрос
                res = new CellSetData();
            }
            return res;
        }
        protected virtual void Initialize(CellSetData cs_descr)
        {
            try
            {
                ResetSettings();

                IsWaiting = true;
                DateTime start = DateTime.Now;
                //System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing start: " + start.ToString());

                m_CSDescr = cs_descr;
                if (cs_descr != null)
                {
                    m_CellSetProvider = new CellSetDataProvider(cs_descr);
                    ImportSizeInfo();
                }
                PivotGrid.Initialize(m_CellSetProvider);
                UpdateButtons();

                DateTime stop = DateTime.Now;
                //System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing stop: " + stop.ToString());
                System.Diagnostics.Debug.WriteLine("UpdateablePivotGrid initializing time: " + (stop - start).ToString());
            }
            finally
            {
                IsWaiting = false;
            }
        }
        internal static CellSetData Deserialize(XmlReader reader)
        {
            if (reader != null)
            {
                try
                {
                    if (!(reader.NodeType == XmlNodeType.Element &&
                        reader.Name == XML_CellSetData))
                    {
                        reader.ReadToFollowing(XML_CellSetData);
                    }

                    CellSetData target = new CellSetData();

                    // Начало - CellSetData
                    reader.ReadStartElement(XML_CellSetData);

                    var data = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray;
                    
                    // Имя куба
                    target.CubeName = data[0] != null ? data[0].ToString() : String.Empty;

                    // Соединение
                    var connection = data.GetArray(1);
                    target.Connection.ConnectionID = connection[0].ToString();
                    target.Connection.ConnectionString = connection[1].ToString();

                    reader.Read();

                    // Оси
                    reader.ReadStartElement("Axes");

                    var axes = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray;
                    for (int a = 0; a < axes.Count; a++)
                    {
                        var axis_data = axes.GetArray(a);
                        AxisData axis = new AxisData();
                        axis.AxisNum = a;
                        // Название оси
                        axis.Name = axis_data[0].ToString();
                        // Позиции 
                        var positions = axis_data.GetArray(1);

                        for (int p = 0; p < positions.Count; p++)
                        {
                            var position_data = positions.GetArray(p);
                            PositionData pos = new PositionData();

                            for (int m = 0; m < position_data.Count; m++)
                            {
                                var member_data = position_data.GetArray(m);
                                PositionMemberData member = new PositionMemberData(Convert.ToInt32(member_data[0]));
                                member.DrilledDown = Convert.ToBoolean(member_data[1]);
                                pos.Members.Add(member);
                            }

                            axis.Positions.Add(pos);
                        }

                        // Названаия свойств
                        var PropertiesNames = axis_data.GetArray(2);
                        // Названаия пользовательских свойств
                        var MemberPropertiesNames = axis_data.GetArray(3);
                        // Элементы оси
                        var members = axis_data.GetArray(4);

                        // Варианты стиля
                        var equalsMemberProps = axis_data.GetArray(5);
                        // Описание стиля
                        var equalsMemberPropertiesNames = axis_data.GetArray(6);

                        for (int m = 0; m < members.Count; m++)
                        {
                            var member_data = members.GetArray(m);
                            var Settings = member_data.GetArray(0);
                            var PropertiesValues = member_data.GetArray(1);
                            var MemberPropertiesValues = member_data.GetArray(2);
                            int MemberPropertiesStyleId = Convert.ToInt32(member_data[3]);

                            MemberData member = new MemberData();
                            int x = 0;
                            member.Caption = Settings[x++].ToString();
                            member.Description = Settings[x++].ToString();
                            member.Name = Settings[x++].ToString();
                            member.UniqueName = Settings[x++].ToString();
                            member.ChildCount = Convert.ToInt32(Settings[x++].ToString());
                            member.DrilledDown = Convert.ToBoolean(Settings[x++].ToString());
                            member.LevelDepth = Convert.ToInt32(Settings[x++].ToString());
                            member.LevelName = Settings[x++].ToString();
                            member.HierarchyUniqueName = Settings[x++].ToString();
                            member.ParentSameAsPrevious = Convert.ToBoolean(Settings[x++].ToString());

                            for (int j = 0; j < PropertiesValues.Length; j++)
                            {
                                member.Properties.Add(new PropertyData(PropertiesNames[j].ToString(), ConvertFromJson(PropertiesValues[j])));
                            }
                            for (int j = 0; j < MemberPropertiesValues.Length; j++)
                            {
                                member.MemberProperties.Add(new PropertyData(MemberPropertiesNames[j].ToString(), ConvertFromJson(MemberPropertiesValues[j])));
                            }

                            var member_equalsPropsValues = equalsMemberProps.GetArray(MemberPropertiesStyleId);
                            for (int k = 0; k < equalsMemberPropertiesNames.Length; k++)
                            {
                                var propName = equalsMemberPropertiesNames[k].ToString();
                                member.MemberProperties.Add(new PropertyData(propName, ConvertFromJson(member_equalsPropsValues[k])));
                            }

                            axis.Members.Add(axis.Members.Count, member);
                        }

                        target.Axes.Add(axis);
                    }

                    reader.Read();

                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Axes")
                    {
                        reader.ReadEndElement();
                    }

                    // Ячейки
                    reader.ReadStartElement("Cells");

                    var strData = reader.Value;
                    target.DeserializeData(strData);
                    reader.Read();

                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Cells")
                    {
                        reader.ReadEndElement();
                    }
                    // Конец - CellSetData
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == XML_CellSetData)
                    {
                        reader.ReadEndElement();
                    }
                    return target;
                }
                catch (XmlException)
                {
                    throw;
                }
            }
            return null;
        }