示例#1
0
        /// <summary>
        ///     Adds the specified name.
        /// </summary>
        /// <typeparam name="T1">The type of the t1.</typeparam>
        /// <param name="name">The name.</param>
        /// <param name="mapping">The mapping.</param>
        /// <exception cref="ArgumentException">
        ///     name
        ///     or
        ///     name
        /// </exception>
        /// <exception cref="Exception">
        /// </exception>
        /// TODO Edit XML Comment Template for Add`1
        public static void Add <T1>(string name, GridDefinition <T1> mapping)
        {
            if (Table.ContainsKey(name))
            {
                throw new ArgumentException(
                          $"There is already a grid definition with the name '{name}'.",
                          nameof(name));
            }

            if (mapping.RetrieveData == null)
            {
                throw new ArgumentException(
                          $"There is no RetrieveData expression defined for grid '{name}'.",
                          nameof(name));
            }

            if (mapping.Sorting &&
                string.IsNullOrWhiteSpace(mapping.DefaultSortColumn))
            {
                throw new Exception(
                          $"Grid '{name}': When sorting is enabled, a default sort column must be specified");
            }

            if (mapping.AdditionalQueryOptionNames.Count > 0)
            {
                // TODO: dynamically get names
                var forbiddenNames = new HashSet <string>
                {
                    QueryStringParser.QueryStringSuffixPage,
                    QueryStringParser.QueryStringSuffixSort,
                    QueryStringParser.QueryStringSuffixSortDir,
                    QueryStringParser.QueryStringSuffixEngine,
                    QueryStringParser.QueryStringSuffixItemsPerPage,
                    QueryStringParser.QueryStringSuffixColumns
                };

                mapping.GetColumns()
                .ToList()
                .ForEach(col => forbiddenNames.Add(col.ColumnName));

                foreach (var forbiddenName in forbiddenNames)
                {
                    if (mapping.AdditionalQueryOptionNames.Contains(
                            forbiddenName,
                            StringComparer.InvariantCultureIgnoreCase))
                    {
                        throw new Exception(
                                  $"Grid '{name}': Invalid additional query option name: '{forbiddenName}'. Cannot be column name or reserved keyword.");
                    }
                }
            }

            Table.Add(name, mapping);
        }
        public static void Add <T1>(string name, GridDefinition <T1> mapping)
        {
            if (mapping.RetrieveData == null)
            {
                throw new ArgumentException(
                          String.Format("There is no RetrieveData expression defined for grid '{0}'.", name),
                          "RetrieveData");
            }

            if (mapping.Sorting && String.IsNullOrWhiteSpace(mapping.DefaultSortColumn))
            {
                throw new Exception(
                          String.Format("Grid '{0}': When sorting is enabled, a default sort column must be specified", name));
            }

            if (mapping.AdditionalQueryOptionNames.Count > 0)
            {
                // TODO: dynamically get names
                HashSet <string> forbiddenNames = new HashSet <string>();
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_Page);
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_Sort);
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_SortDir);
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_Engine);
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_ItemsPerPage);
                forbiddenNames.Add(QueryStringParser.QueryStringSuffix_Columns);

                mapping.GetColumns().ToList().ForEach(col => forbiddenNames.Add(col.ColumnName));

                foreach (var forbiddenName in forbiddenNames)
                {
                    if (mapping.AdditionalQueryOptionNames.Contains(forbiddenName, StringComparer.InvariantCultureIgnoreCase))
                    {
                        throw new Exception(String.Format("Grid '{0}': Invalid additional query option name: '{1}'. Cannot be column name or reserved keyword.",
                                                          name, forbiddenName));
                    }
                }
            }

            _table.Add(name, mapping);
        }