private static JqGridColumnModel CreateJqGridColumnModel(ModelMetadata columnMetadata, IUrlHelper urlHelper)
        {
            JqGridColumnModel columnModel = new JqGridColumnModel(columnMetadata.PropertyName);

            TimestampAttribute              timeStampAttribute              = null;
            RangeAttribute                  rangeAttribute                  = null;
            RequiredAttribute               requiredAttribute               = null;
            JqGridColumnLayoutAttribute     jqGridColumnLayoutAttribute     = null;
            JqGridColumnSortableAttribute   jqGridColumnSortableAttribute   = null;
            JqGridColumnFormatterAttribute  jqGridColumnFormatterAttribute  = null;
            JqGridColumnSearchableAttribute jqGridColumnSearchableAttribute = null;
            JqGridColumnEditableAttribute   jqGridColumnEditableAttribute   = null;
            JqGridColumnSummaryAttribute    jqGridColumnSummaryAttribute    = null;
            JqGridColumnMappingAttribute    jqGridColumnMappingAttribute    = null;

            foreach (Attribute customAttribute in columnMetadata.ContainerType.GetProperty(columnMetadata.PropertyName).GetCustomAttributes(true))
            {
                timeStampAttribute              = (customAttribute as TimestampAttribute) ?? timeStampAttribute;
                rangeAttribute                  = (customAttribute as RangeAttribute) ?? rangeAttribute;
                requiredAttribute               = (customAttribute as RequiredAttribute) ?? requiredAttribute;
                jqGridColumnLayoutAttribute     = (customAttribute as JqGridColumnLayoutAttribute) ?? jqGridColumnLayoutAttribute;
                jqGridColumnSortableAttribute   = (customAttribute as JqGridColumnSortableAttribute) ?? jqGridColumnSortableAttribute;
                jqGridColumnFormatterAttribute  = (customAttribute as JqGridColumnFormatterAttribute) ?? jqGridColumnFormatterAttribute;
                jqGridColumnSearchableAttribute = (customAttribute as JqGridColumnSearchableAttribute) ?? jqGridColumnSearchableAttribute;
                jqGridColumnEditableAttribute   = (customAttribute as JqGridColumnEditableAttribute) ?? jqGridColumnEditableAttribute;
                jqGridColumnSummaryAttribute    = (customAttribute as JqGridColumnSummaryAttribute) ?? jqGridColumnSummaryAttribute;
                jqGridColumnMappingAttribute    = (customAttribute as JqGridColumnMappingAttribute) ?? jqGridColumnMappingAttribute;
            }

            if (timeStampAttribute != null)
            {
                columnModel.Editable = true;
                columnModel.Hidden   = true;
            }
            else
            {
                columnModel = SetLayoutOptions(columnModel, jqGridColumnLayoutAttribute);
                columnModel = SetSortOptions(columnModel, jqGridColumnSortableAttribute);
                columnModel = SetFormatterOptions(columnModel, jqGridColumnFormatterAttribute);
                columnModel = SetSearchOptions(columnModel, urlHelper, columnMetadata.ModelType, jqGridColumnSearchableAttribute, rangeAttribute);
                columnModel = SetEditOptions(columnModel, urlHelper, columnMetadata.ModelType, jqGridColumnEditableAttribute, rangeAttribute, requiredAttribute);
                columnModel = SetDatePickerDateFormatFromFormatter(columnModel, jqGridColumnFormatterAttribute);
                columnModel = SetSummaryOptions(columnModel, jqGridColumnSummaryAttribute);
                columnModel = SetMappingOptions(columnModel, jqGridColumnMappingAttribute);
            }

            return(columnModel);
        }
        private static JqGridColumnModel SetSearchOptions(JqGridColumnModel columnModel, IUrlHelper urlHelper, Type modelType, JqGridColumnSearchableAttribute jqGridColumnSearchableAttribute, RangeAttribute rangeAttribute)
        {
            if (jqGridColumnSearchableAttribute != null)
            {
                columnModel.Searchable    = jqGridColumnSearchableAttribute.Searchable;
                columnModel.SearchOptions = GetElementOptions(jqGridColumnSearchableAttribute.SearchOptions, urlHelper, jqGridColumnSearchableAttribute);
                columnModel.SearchRules   = GetRules(modelType, jqGridColumnSearchableAttribute, rangeAttribute, null);
                columnModel.SearchType    = jqGridColumnSearchableAttribute.SearchType;
            }

            return(columnModel);
        }