/// <summary> /// This is where you implment the simple aspects of rendering your control. The rest /// will be handled by calling RenderControlHelper's RenderControl() method. /// </summary> /// <param name="writer">The writer.</param> public void RenderBaseControl(HtmlTextWriter writer) { bool ddlItemSelected = false; foreach (ListItem li in _dropDownList.Items) { if (li.Value == _hiddenField.Value) { li.Selected = true; ddlItemSelected = true; } else { li.Selected = false; } } if (!ddlItemSelected) { _textBox.Text = _hiddenField.Value; } writer.AddAttribute(HtmlTextWriterAttribute.Class, "row js-text-or-ddl-row " + this.CssClass); writer.AddAttribute(HtmlTextWriterAttribute.Style, this.Style.Value); writer.RenderBeginTag(HtmlTextWriterTag.Div); _hiddenField.RenderControl(writer); if (ValidateRequestMode == System.Web.UI.ValidateRequestMode.Disabled) { _hfDisableVrm.RenderControl(writer); } writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-6"); writer.RenderBeginTag(HtmlTextWriterTag.Div); _textBox.AddCssClass("js-text-or-ddl-input"); _textBox.RenderControl(writer); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-1"); writer.RenderBeginTag(HtmlTextWriterTag.Div); var lOr = new RockLiteral(); lOr.Label = " "; lOr.Text = "or"; lOr.RenderControl(writer); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-5"); writer.RenderBeginTag(HtmlTextWriterTag.Div); _dropDownList.AddCssClass("js-text-or-ddl-input"); _dropDownList.RenderControl(writer); writer.RenderEndTag(); writer.RenderEndTag(); // row RegisterClientScript(); }
/// <summary> /// Creates the fee field. /// </summary> /// <param name="fee">The fee.</param> /// <param name="setValues">if set to <c>true</c> [set values].</param> /// <param name="feeValues">The fee values.</param> private void CreateFeeField( RegistrationTemplateFee fee, bool setValues, List<FeeInfo> feeValues ) { if ( fee.FeeType == RegistrationFeeType.Single ) { string label = fee.Name; var cost = fee.CostValue.AsDecimalOrNull(); if ( cost.HasValue && cost.Value != 0.0M ) { label = string.Format( "{0} ({1})", fee.Name, cost.Value.ToString("C2")); } if ( fee.AllowMultiple ) { // Single Option, Multi Quantity var numUpDown = new NumberUpDown(); numUpDown.ID = "fee_" + fee.Id.ToString(); numUpDown.Label = label; numUpDown.Minimum = 0; phFees.Controls.Add( numUpDown ); if ( setValues && feeValues != null && feeValues.Any() ) { numUpDown.Value = feeValues.First().Quantity; } } else { // Single Option, Single Quantity var cb = new RockCheckBox(); cb.ID = "fee_" + fee.Id.ToString(); cb.Label = label; cb.SelectedIconCssClass = "fa fa-check-square-o fa-lg"; cb.UnSelectedIconCssClass = "fa fa-square-o fa-lg"; phFees.Controls.Add( cb ); if ( setValues && feeValues != null && feeValues.Any() ) { cb.Checked = feeValues.First().Quantity > 0; } } } else { // Parse the options to get name and cost for each var options = new Dictionary<string, string>(); string[] nameValues = fee.CostValue.Split( new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries ); foreach ( string nameValue in nameValues ) { string[] nameAndValue = nameValue.Split( new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries ); if ( nameAndValue.Length == 1) { options.AddOrIgnore( nameAndValue[0], nameAndValue[0] ); } if ( nameAndValue.Length == 2 ) { options.AddOrIgnore( nameAndValue[0], string.Format( "{0} ({1:C2})", nameAndValue[0], nameAndValue[1].AsDecimal() ) ); } } if ( fee.AllowMultiple ) { HtmlGenericControl feeAllowMultiple = new HtmlGenericControl( "div" ); phFees.Controls.Add( feeAllowMultiple ); feeAllowMultiple.AddCssClass( "feetype-allowmultiples" ); Label titleLabel = new Label(); feeAllowMultiple.Controls.Add( titleLabel ); titleLabel.CssClass = "control-label"; titleLabel.Text = fee.Name; foreach( var optionKeyVal in options ) { var numUpDown = new NumberUpDown(); numUpDown.ID = string.Format( "fee_{0}_{1}", fee.Id, optionKeyVal.Key ); numUpDown.Label = string.Format( "{0}", optionKeyVal.Value ); numUpDown.Minimum = 0; numUpDown.CssClass = "fee-allowmultiple"; feeAllowMultiple.Controls.Add( numUpDown ); if ( setValues && feeValues != null && feeValues.Any() ) { numUpDown.Value = feeValues .Where( f => f.Option == optionKeyVal.Key ) .Select( f => f.Quantity ) .FirstOrDefault(); } } } else { // Multi Option, Single Quantity var ddl = new RockDropDownList(); ddl.ID = "fee_" + fee.Id.ToString(); ddl.AddCssClass( "input-width-md" ); ddl.Label = fee.Name; ddl.DataValueField = "Key"; ddl.DataTextField = "Value"; ddl.DataSource = options; ddl.DataBind(); ddl.Items.Insert( 0, ""); phFees.Controls.Add( ddl ); if ( setValues && feeValues != null && feeValues.Any() ) { ddl.SetValue( feeValues .Where( f => f.Quantity > 0 ) .Select( f => f.Option ) .FirstOrDefault() ); } } } }
/// <summary> /// Gets the filter value control. /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <param name="filterMode">The filter mode.</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required, FilterMode filterMode ) { var ddlList = new RockDropDownList(); ddlList.ID = string.Format( "{0}_ddlList", id ); ddlList.AddCssClass( "js-filter-control" ); if ( !required ) { ddlList.Items.Add( new ListItem() ); } if ( ListSource.Any() ) { foreach ( var item in ListSource ) { ListItem listItem = new ListItem( item.Value, item.Key ); ddlList.Items.Add( listItem ); } return ddlList; } return null; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { _rblTagType = new RockRadioButtonList(); _rblTagType.ID = filterControl.ID + "_tagType"; _rblTagType.RepeatDirection = RepeatDirection.Horizontal; _rblTagType.Items.Add( new ListItem( "Personal Tags", "1" ) ); _rblTagType.Items.Add( new ListItem( "Organizational Tags", "2" ) ); _rblTagType.SelectedValue = "1"; _rblTagType.AutoPostBack = true; _rblTagType.SelectedIndexChanged += rblTagType_SelectedIndexChanged; filterControl.Controls.Add( _rblTagType ); _ddlTagList = new RockDropDownList(); _ddlTagList.ID = filterControl.ID + "_ddlTagList"; _ddlTagList.AddCssClass( "js-tag-filter-list" ); filterControl.Controls.Add( _ddlTagList ); PopulateTagList(); return new Control[2] { _rblTagType, _ddlTagList }; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.Label = "Count"; ddlIntegerCompare.ID = string.Format( "{0}_ddlIntegerCompare", filterControl.ID ); ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); var nbMemberCount = new NumberBox(); nbMemberCount.Label = " "; nbMemberCount.ID = string.Format( "{0}_nbMemberCount", filterControl.ID ); nbMemberCount.AddCssClass( "js-filter-control js-member-count" ); nbMemberCount.FieldName = "Member Count"; filterControl.Controls.Add( nbMemberCount ); RockDropDownList ddlLeader = new RockDropDownList(); ddlLeader.ID = string.Format( "{0}_ddlMemberType", filterControl.ID ); ddlLeader.AddCssClass( "js-filter-control js-member-is-leader" ); ddlLeader.Label = "Member Type"; ddlLeader.Items.Add( new ListItem( string.Empty, string.Empty ) ); ddlLeader.Items.Add( new ListItem( "Leader", "true" ) ); ddlLeader.Items.Add( new ListItem( "Not Leader", "false" ) ); filterControl.Controls.Add( ddlLeader ); ddlLeader.Style[HtmlTextWriterStyle.Display] = this.SimpleMemberCountMode ? "none" : string.Empty; RockDropDownList ddlMemberStatus = new RockDropDownList(); ddlMemberStatus.ID = string.Format( "{0}_ddlMemberStatus", filterControl.ID ); ddlMemberStatus.AddCssClass( "js-filter-control js-member-status" ); ddlMemberStatus.Label = "Member Status"; ddlMemberStatus.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( GroupMemberStatus memberStatus in Enum.GetValues( typeof( GroupMemberStatus ) ) ) { ddlMemberStatus.Items.Add( new ListItem( memberStatus.ConvertToString(), memberStatus.ConvertToInt().ToString() ) ); } filterControl.Controls.Add( ddlMemberStatus ); ddlLeader.Visible = !this.SimpleMemberCountMode; ddlMemberStatus.Visible = !this.SimpleMemberCountMode; return new Control[] { ddlIntegerCompare, nbMemberCount, ddlLeader, ddlMemberStatus }; }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { Controls.Clear(); _hfValue.ID = this.ID + "_hfValue"; Controls.Add(_hfValue); _actionControls = new List <RockTextBox>(); _buttonHtmlControls = new List <RockDropDownList>(); _activityControls = new List <RockDropDownList>(); _responseControls = new List <RockTextBox>(); string[] nameValues = this.Value.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < nameValues.Length; i++) { string[] nameValueResponse = nameValues[i].Split(new char[] { '^' }); var tbAction = new RockTextBox(); tbAction.ID = this.ID + "_tbAction" + i.ToString(); Controls.Add(tbAction); tbAction.Placeholder = "Action"; tbAction.AddCssClass("form-action-key"); tbAction.AddCssClass("form-control"); tbAction.AddCssClass("js-form-action-input"); tbAction.Text = nameValueResponse.Length > 0 ? nameValueResponse[0] : string.Empty; _actionControls.Add(tbAction); var ddlButtonHtml = new RockDropDownList(); ddlButtonHtml.ID = this.ID + "_ddlButtonHtml" + i.ToString(); ddlButtonHtml.EnableViewState = false; Controls.Add(ddlButtonHtml); ddlButtonHtml.AddCssClass("form-action-button"); ddlButtonHtml.AddCssClass("form-control"); ddlButtonHtml.AddCssClass("js-form-action-input"); var definedType = DefinedTypeCache.Get(Rock.SystemGuid.DefinedType.BUTTON_HTML.AsGuid()); foreach (var definedValue in definedType.DefinedValues) { var li = new ListItem(definedValue.Value, definedValue.Guid.ToString()); li.Selected = nameValueResponse.Length > 1 && li.Value.Equals(nameValueResponse[1], StringComparison.OrdinalIgnoreCase); ddlButtonHtml.Items.Add(li); } _buttonHtmlControls.Add(ddlButtonHtml); var ddlActivity = new RockDropDownList(); ddlActivity.ID = this.ID + "_ddlActivity" + i.ToString(); ddlActivity.EnableViewState = false; Controls.Add(ddlActivity); ddlActivity.AddCssClass("form-action-value"); ddlActivity.AddCssClass("form-control"); ddlActivity.AddCssClass("js-form-action-input"); ddlActivity.DataTextField = "Value"; ddlActivity.DataValueField = "Key"; ddlActivity.DataSource = Activities; ddlActivity.DataBind(); ddlActivity.Items.Insert(0, new ListItem(string.Empty, string.Empty)); foreach (ListItem li in ddlActivity.Items) { li.Selected = nameValueResponse.Length > 2 && li.Value.Equals(nameValueResponse[2], StringComparison.OrdinalIgnoreCase); } _activityControls.Add(ddlActivity); var tbResponse = new RockTextBox(); tbResponse.ID = this.ID + "_tbResponse" + i.ToString(); Controls.Add(tbResponse); tbResponse.Placeholder = "Response Text"; tbResponse.AddCssClass("form-action-response"); tbResponse.AddCssClass("form-control"); tbResponse.AddCssClass("js-form-action-input"); tbResponse.Text = nameValueResponse.Length > 3 ? nameValueResponse[3] : string.Empty; _responseControls.Add(tbResponse); } }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { Controls.Clear(); _hfValue.ID = this.ID + "_hfValue"; Controls.Add( _hfValue ); _actionControls = new List<RockTextBox>(); _buttonHtmlControls = new List<RockDropDownList>(); _activityControls = new List<RockDropDownList>(); _responseControls = new List<RockTextBox>(); string[] nameValues = this.Value.Split( new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries ); for ( int i = 0; i < nameValues.Length; i++ ) { string[] nameValueResponse = nameValues[i].Split( new char[] { '^' } ); var tbAction = new RockTextBox(); tbAction.ID = this.ID + "_tbAction" + i.ToString(); Controls.Add( tbAction ); tbAction.Placeholder = "Action"; tbAction.AddCssClass( "form-action-key" ); tbAction.AddCssClass( "form-control" ); tbAction.AddCssClass( "js-form-action-input" ); tbAction.Text = nameValueResponse.Length > 0 ? nameValueResponse[0] : string.Empty; _actionControls.Add( tbAction ); var ddlButtonHtml = new RockDropDownList(); ddlButtonHtml.ID = this.ID + "_ddlButtonHtml" + i.ToString(); Controls.Add( ddlButtonHtml ); ddlButtonHtml.AddCssClass( "form-action-button" ); ddlButtonHtml.AddCssClass( "form-control" ); ddlButtonHtml.AddCssClass( "js-form-action-input" ); var definedType = Rock.Web.Cache.DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.BUTTON_HTML.AsGuid() ); foreach( var definedValue in definedType.DefinedValues ) { var li = new ListItem( definedValue.Value, definedValue.Guid.ToString() ); li.Selected = nameValueResponse.Length > 1 && li.Value.Equals( nameValueResponse[1], StringComparison.OrdinalIgnoreCase ); ddlButtonHtml.Items.Add( li ); } _buttonHtmlControls.Add( ddlButtonHtml ); var ddlActivity = new RockDropDownList(); ddlActivity.ID = this.ID + "_ddlActivity" + i.ToString(); Controls.Add( ddlActivity ); ddlActivity.AddCssClass( "form-action-value" ); ddlActivity.AddCssClass( "form-control" ); ddlActivity.AddCssClass( "js-form-action-input" ); ddlActivity.DataTextField = "Value"; ddlActivity.DataValueField = "Key"; ddlActivity.DataSource = Activities; ddlActivity.DataBind(); ddlActivity.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); foreach(ListItem li in ddlActivity.Items) { li.Selected = nameValueResponse.Length > 2 && li.Value.Equals( nameValueResponse[2], StringComparison.OrdinalIgnoreCase ); } _activityControls.Add( ddlActivity ); var tbResponse = new RockTextBox(); tbResponse.ID = this.ID + "_tbResponse" + i.ToString(); Controls.Add( tbResponse ); tbResponse.Placeholder = "Response Text"; tbResponse.AddCssClass( "form-action-response" ); tbResponse.AddCssClass( "form-control" ); tbResponse.AddCssClass( "js-form-action-input" ); tbResponse.Text = nameValueResponse.Length > 3 ? nameValueResponse[3] : string.Empty; _responseControls.Add( tbResponse ); } }
/// <summary> /// Gets the filter value control. /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required ) { var ddlList = new RockDropDownList(); ddlList.ID = string.Format( "{0}_ddlList", id ); ddlList.AddCssClass( "js-filter-control" ); if ( !required ) { ddlList.Items.Add( new ListItem() ); } var control = EditControl( configurationValues, id ); if ( control is RockCheckBoxList ) { foreach( ListItem li in ((RockCheckBoxList)control).Items) { ddlList.Items.Add( new ListItem( li.Text, li.Value ) ); } } return ddlList; }
/// <summary> /// Gets the filter value control. /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <param name="filterMode">The filter mode.</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required, FilterMode filterMode ) { string yesText = "Yes"; string noText = "No"; if ( configurationValues != null ) { if ( configurationValues.ContainsKey( "truetext" ) ) { yesText = configurationValues["truetext"].Value; } if ( configurationValues.ContainsKey( "falsetext" ) ) { noText = configurationValues["falsetext"].Value; } } ListControl filterValueControl = new RockDropDownList(); filterValueControl.ID = string.Format( "{0}_ctlCompareValue", id ); filterValueControl.AddCssClass( "js-filter-control" ); if ( !required ) { filterValueControl.Items.Add( new ListItem() ); } filterValueControl.Items.Add( new ListItem( yesText, "True" ) ); filterValueControl.Items.Add( new ListItem( noText, "False" ) ); return filterValueControl; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var controls = new List<Control>(); var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); controls.Add( ddlIntegerCompare ); var ddlGradeDefinedValue = new RockDropDownList(); ddlGradeDefinedValue.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); ddlGradeDefinedValue.AddCssClass( "js-filter-control" ); ddlGradeDefinedValue.Items.Clear(); // add blank item as first item ddlGradeDefinedValue.Items.Add( new ListItem() ); var schoolGrades = DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.SCHOOL_GRADES.AsGuid() ); if ( schoolGrades != null ) { foreach ( var schoolGrade in schoolGrades.DefinedValues.OrderByDescending( a => a.Value.AsInteger() ) ) { ddlGradeDefinedValue.Items.Add( new ListItem( schoolGrade.Description, schoolGrade.Guid.ToString() ) ); } } filterControl.Controls.Add( ddlGradeDefinedValue ); controls.Add( ddlGradeDefinedValue ); return controls.ToArray(); }
/// <summary> /// Creates the child controls. /// </summary> /// <param name="parentControl"></param> /// <returns></returns> public override System.Web.UI.Control[] CreateChildControls( System.Web.UI.Control parentControl ) { // Define Control: Is Leader? RockDropDownList ddlLeader = new RockDropDownList(); ddlLeader.ID = string.Format( "{0}_ddlMemberType", parentControl.ID ); ddlLeader.AddCssClass( "js-filter-control js-member-is-leader" ); ddlLeader.Label = "Member Type"; ddlLeader.Items.Add( new ListItem( string.Empty, string.Empty ) ); ddlLeader.Items.Add( new ListItem( "Leader", "true" ) ); ddlLeader.Items.Add( new ListItem( "Not Leader", "false" ) ); parentControl.Controls.Add( ddlLeader ); // Define Control: Member Status RockDropDownList ddlMemberStatus = new RockDropDownList(); ddlMemberStatus.ID = string.Format( "{0}_ddlMemberStatus", parentControl.ID ); ddlMemberStatus.AddCssClass( "js-filter-control js-member-status" ); ddlMemberStatus.Label = "Member Status"; ddlMemberStatus.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( GroupMemberStatus memberStatus in Enum.GetValues( typeof( GroupMemberStatus ) ) ) { ddlMemberStatus.Items.Add( new ListItem( memberStatus.ConvertToString(), memberStatus.ConvertToInt().ToString() ) ); } parentControl.Controls.Add( ddlMemberStatus ); return new System.Web.UI.Control[] { ddlLeader, ddlMemberStatus }; }
/// <summary> /// Gets the filter value control. /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required ) { var ddl = new RockDropDownList(); ddl.ID = string.Format( "{0}_ctlCompareValue", id ); ddl.AddCssClass( "js-filter-control" ); if ( !required ) { ddl.Items.Add( new ListItem() ); } ddl.Items.Add( new ListItem( "True", "True" ) ); ddl.Items.Add( new ListItem( "False", "False" ) ); return ddl; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var controls = new List<Control>(); ddlStringFilterComparison = ComparisonHelper.ComparisonControl( ComparisonHelper.StringFilterComparisonTypes ); ddlStringFilterComparison.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); ddlStringFilterComparison.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlStringFilterComparison ); controls.Add( ddlStringFilterComparison ); tbPostalCode = new RockTextBox(); tbPostalCode.ID = filterControl.ID + "_tbPostalCode"; tbPostalCode.AddCssClass( "js-filter-control" ); filterControl.Controls.Add( tbPostalCode ); controls.Add( tbPostalCode ); return controls.ToArray(); }