/// <summary>
        /// Dynamically display attributes added to the rendered workflow as columns in the <see cref="gWorkflows"/> grid
        /// </summary>
        private void AddDynamicControls()
        {
            // Remove attribute columns
            foreach (var column in gWorkflows.Columns.OfType <AttributeField>().ToList())
            {
                gWorkflows.Columns.Remove(column);
            }

            if (AvailableAttributes != null)
            {
                foreach (var attribute in AvailableAttributes)
                {
                    bool columnExists = gWorkflows.Columns.OfType <AttributeField>().Any(a => a.AttributeId == attribute.Id);
                    if (!columnExists)
                    {
                        AttributeField boundField = new AttributeField();
                        boundField.DataField   = attribute.Key;
                        boundField.AttributeId = attribute.Id;
                        boundField.HeaderText  = attribute.Name;

                        var attributeCache = AttributeCache.Get(attribute.Id);
                        if (attributeCache != null)
                        {
                            boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue;
                        }

                        gWorkflows.Columns.Add(boundField);
                    }
                }
            }

            // Add PersonLinkField column
            var personLinkField = new PersonProfileLinkField();

            personLinkField.LinkedPageAttributeKey = AttributeKeys.PersonProfilePage;
            gWorkflows.Columns.Add(personLinkField);

            // Add delete column
            var deleteField = new DeleteField();

            deleteField.Click += gWorkflows_Delete;
            gWorkflows.Columns.Add(deleteField);
        }
        /// <summary>
        /// Adds the PersonProfilePage button link and the "delete" row button column.
        /// </summary>
        private void AddGridRowButtons()
        {
            // Add Link to Profile Page Column
            if (!string.IsNullOrEmpty(GetAttributeValue("PersonProfilePage")))
            {
                var personProfileLinkField = new PersonProfileLinkField
                {
                    LinkedPageAttributeKey = "PersonProfilePage"
                };

                gSteps.Columns.Add(personProfileLinkField);
            }

            // Add delete column
            var deleteField = new DeleteField();

            gSteps.Columns.Add(deleteField);

            deleteField.Click += DeleteStep_Click;
        }