/// <summary>
        /// Compares dimension values for sorting purpose. Sorting is made by display order, and then by name.
        /// Values with zero display orders should be at the beginning of list.
        /// E.g. we have the following values:
        /// Name = Black, DisplayOrder = 3
        /// Name = Silver, DisplayOrder = 0
        /// Name = White, DisplayOrder = 1
        /// Name = Gold, DisplayOrder = 2
        /// Name = Red, DisplayOrder = 0
        /// Result sorted list should be: Red(0), Silver(0), White (1), Gold (2), Black (3).
        /// </summary>
        /// <returns></returns>
        internal static int CompareDisplayOrders(DimensionValue v1, DimensionValue v2)
        {
            // values with different dimension types (e.g. color vs style) should not be compared by this comparison
            if (v1.Dimension != v2.Dimension)
            {
                return(0);
            }

            // if display orders are equal, compare by name
            if (v1.DisplayOrder == v2.DisplayOrder)
            {
                return(v1.Name.CompareTo(v2.Name));
            }

            // in all other cases common compare by display order values
            return(v1.DisplayOrder.CompareTo(v2.DisplayOrder));
        }
        private void LoadVariants(DataTable dataTable, DimensionType dimType, string tableName, string dimensionId, string dimensionName, string dimensionDisplayOrder)
        {
            using (DataTable dt = SelectDistinct(tableName, dataTable, string.Empty, dimensionId, dimensionName, dimensionDisplayOrder))
            {
                DataRow[] rows = dt.Select(string.Empty);
                if (rows.Length > 0)
                {
                    activeDimensions.Add(dimType, null);

                    foreach (DataRow row in rows)
                    {
                        DimensionValue dv = new DimensionValue(row["ID"].ToString(), row["NAME"].ToString(), dimType,
                                                               string.IsNullOrWhiteSpace(dimensionDisplayOrder) ? 0 : Convert.ToDecimal(row["DISPLAYORDER"].ToString()));
                        allVariants.Add(dv);
                    }
                }
            }
        }