Sharepoint Using event handler to make a column unique

 

Hi,

 

Many a times in a Sharepoint list we want to have one of the columns to act as a unique column. But there is no easy way to do it.

 

There are a couple of ways to make this happen,

            Use a custom field which behaves like a unique column.

            Use an event handler to check for uniqueness.

 

I normally prefer the use of event handler for this purpose. Event handler gives an easy way to make any or many column in a list to behave as if they can contain only unique data. Below is an example of the code required in the event handler.

 

const string _QUERY = @"<Query><Where><Eq><FieldRef Name=""ColumnName"" /><Value Type=""Text"">{0}</Value></Eq></Where></Query>";
        public override void ItemAdding(SPItemEventProperties properties)
        {
            if (properties.AfterProperties["ColumnName "] != null)
            {
                string currentValue = properties.AfterProperties["ColumnName"].ToString();
                using (SPWeb web = properties.OpenWeb())
                {
                    //get the current list
                    SPList list = web.Lists[properties.ListId];

                    SPQuery _query = new SPQuery();
                    q.Query = string.Format(_QUERY, currentValue);
                    SPListItemCollection itemsWithSameValue = list.GetItems(_query);

                    if (itemsWithSameValue.Count > 0)
                    {
                        properties.Cancel = true;
                        properties.ErrorMessage = "There is already an item with the same value in this list.";
                    }
                }
            }
        }

 

This will create an event handler for the adding event and stop any new addition of record if the value already exists. Remember to make this work properly, you will need another event for updating event to stop user from adding same value by editing a record.

 

Vikram

1 Comment

Comments have been disabled for this content.