/// <summary>
        ///     Возвращает объект типа <see cref="DataTable" /> с данными. Исходя из фильтра SQL.
        /// </summary>
        /// <param name="spList"></param>
        /// <param name="spQuery">Объект <see cref="SPQuery" />, необходим для енерации запроса в БД.</param>
        /// <param name="currentUser">
        ///     Текущий полльзователь, объект <see cref="SPUser" />, используется для расчёта доступа к
        ///     элементам списка.
        /// </param>
        /// <returns>Возвращает собранный объект <see cref="DataTable" /> с данными.</returns>
        public static DataTable GetDataTable(SPList spList, SPQuery spQuery, SPUser currentUser)
        {
            ViewOverrider overrider = new ViewOverrider(spList, spQuery, currentUser);
            DataTable     dataTable = overrider.BuildDataTable();

            return(dataTable);
        }
        /// <summary>
        ///     Позволяет сгенерировать объект настроек <see cref="ViewOverriderSettings" />, на основе объекта
        ///     <see cref="SPView" /> и полльзователя <see cref="SPUser" />.
        /// </summary>
        /// <param name="spView">Объект <see cref="SPView" />, необходим для генерации настроек.</param>
        /// <param name="currentUser">
        ///     Текущий полльзователь, объект <see cref="SPUser" />, используется для расчёта доступа к
        ///     элементам списка.
        /// </param>
        /// <returns>Объект <see cref="ViewOverriderSettings" />.</returns>
        public static ViewOverriderSettings CreateViewSettings(SPView spView, SPUser currentUser)
        {
            ViewOverrider         viewOverrider = new ViewOverrider(spView, currentUser);
            string                sqlFilterString;
            HeadList              gridSettings = viewOverrider.BuildSettings(out sqlFilterString);
            ViewOverriderSettings settings     = new ViewOverriderSettings
            {
                GridSettings = gridSettings,
                SqlFilters   = sqlFilterString
            };

            return(settings);
        }
        /// <summary>
        ///     Возвращает объект типа <see cref="DataTableSource" /> с данными. Исходя из фильтра SQL.
        /// </summary>
        /// <param name="spView">Объект <see cref="SPView" />, необходим для валидации полей на отображении и в списке.</param>
        /// <param name="currentUser">
        ///     Текущий полльзователь, объект <see cref="SPUser" />, используется для расчёта доступа к
        ///     элементам списка.
        /// </param>
        /// <param name="settings">Объект <see cref="ViewOverriderSettings" /> настроек.</param>
        /// <returns>Возвращает собранный объект <see cref="DataTableSource" /> с данными.</returns>
        public static DataTableSource GetDataTableBySettings(SPView spView, SPUser currentUser, ViewOverriderSettings settings)
        {
            string sqlFilters = settings.SqlFilters;

            if (SPContext.Current != null && SPContext.Current.Web != null && SPContext.Current.Web.CurrentUser != null)
            {
                string userValue = string.Format("'{0};#{1}'", SPContext.Current.Web.CurrentUser.ID, SPContext.Current.Web.CurrentUser.Name);
                sqlFilters = sqlFilters.Replace(ViewOverrider.SPUserTemplate, userValue);
            }
            ViewOverrider   dataTableBySettings = new ViewOverrider(spView, currentUser, settings.GridSettings, sqlFilters);
            DataTableSource dataTableSource     = dataTableBySettings.BuildDataTableSource();

            return(dataTableSource);
        }