Создание настраиваемого поля, которое требует уникальных значений - PullRequest
2 голосов
/ 18 марта 2009

Я реализую пользовательское определение списка, которое содержит несколько столбцов. Требование к одному из столбцов состоит в том, что он может содержать только уникальные значения. Если пользователь вводит значение, которое уже присутствует в другом элементе списка, должна появиться ошибка проверки.

Есть ли варианты для выполнения этого OOTB, возможно, в определении списка или в типе настраиваемого поля? Или мне нужно самому реализовать эту функцию?

Ответы [ 3 ]

3 голосов
/ 18 марта 2009

Для обеспечения уникальных значений в столбце у вас есть две возможности.

  1. Вы можете переопределить метод Validate () для своего типа поля, запросить список для элементов с тем же значением и соответственно установить свойство IsValid.

  2. Напишите свои собственные приемники событий ItemAdding и ItemUpdating для запроса списка.

0 голосов
/ 19 марта 2009

Существует функция с открытым исходным кодом под названием «Уникальная политика столбцов», доступная по адресу http://www.codeplex.com/features,, которая решит вашу проблему без создания зависимости от нового типа поля.

0 голосов
/ 19 марта 2009

В прошлом я использовал следующее.

  /// <summary>
            /// Override Validation to check to see if our list already contains an item with the same value
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public override string GetValidatedString(object value)
            {
                // Get Current List
                SPList thisList = ParentList;

                SPQuery keywordQuery = new SPQuery();

                // Check to see if the current field contains the value entered into field
                keywordQuery.Query = string.Format("<Where>" +
                         "<Eq>" +
                            "<FieldRef Name='{1}' />" +
                            "<Value Type='Text'>{0}</Value>" +
                         "</Eq>" +
                   "</Where>", value, InternalName);

                SPListItemCollection liKeywords = thisList.GetItems(keywordQuery);

                // Will return greater than 0 if it finds the value in the list
                if (liKeywords.Count > 0)
                {
                    // checks to see if the list item is being updated, if it is the same finds the same ID as the one being Validated
                    if (liKeywords[0].ID != SPContext.Current.ItemId)
                    {

                        // Show error message
                        throw new SPFieldValidationException(string.Format("An item called '{0}' already exists", value));
                    }
                }

                // return entered value if unique
                return base.GetValidatedString(value);
            }

HTH Phill

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...