Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / UI / WebControls / CheckBoxList.cs / 1 / CheckBoxList.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.Security.Permissions; using System.Web; using System.Web.UI; ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class CheckBoxList : ListControl, IRepeatInfoUser, INamingContainer, IPostBackDataHandler #if ORCAS ,IItemPaginationInfo, IPaginationContainer #endif { private CheckBox _controlToRepeat; private string _oldAccessKey; private bool _hasNotifiedOfChange; private bool _cachedRegisterEnabled; private bool _cachedIsEnabled; #if ORCAS private int _offset; private int _itemCount = -1; private int _previousOffset; private int _previousItemCount; #endif ///Creates a group of ///controls. /// public CheckBoxList() { #if ORCAS _offset = 0; _itemCount = -1; _previousOffset = 0; _previousItemCount = -1; #endif _controlToRepeat = new CheckBox(); _controlToRepeat.EnableViewState = false; // Whidbey 28457: We need to set a default numeric ID for the case // of an empty checkbox list. It is because the child CheckBox // always registers itself to Page as a PostBackData control and // during postback it will invoke LoadPostData in this class and the // method always assumes the ID is numeric. This default ID setting // has been done in this way since V1. _controlToRepeat.ID = "0"; Controls.Add(_controlToRepeat); } ////// Initializes a new instance of the ///class. /// /// [ WebCategory("Layout"), DefaultValue(-1), WebSysDescription(SR.CheckBoxList_CellPadding) ] public virtual int CellPadding { get { if (ControlStyleCreated == false) { return -1; } return ((TableStyle)ControlStyle).CellPadding; } set { ((TableStyle)ControlStyle).CellPadding = value; } } ////// Gets or sets /// the padding between each item. /// ////// [ WebCategory("Layout"), DefaultValue(-1), WebSysDescription(SR.CheckBoxList_CellSpacing) ] public virtual int CellSpacing { get { if (ControlStyleCreated == false) { return -1; } return ((TableStyle)ControlStyle).CellSpacing; } set { ((TableStyle)ControlStyle).CellSpacing = value; } } internal override bool IsMultiSelectInternal { get { // a CheckBoxList is always multiselect. return true; } } ////// Gets or sets /// the spacing between each item. /// ////// [ WebCategory("Layout"), DefaultValue(0), WebSysDescription(SR.CheckBoxList_RepeatColumns) ] public virtual int RepeatColumns { get { object o = ViewState["RepeatColumns"]; return((o == null) ? 0 : (int)o); } set { if (value < 0) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatColumns"] = value; } } ///Gets or sets the number of columns to repeat. ////// [ WebCategory("Layout"), DefaultValue(RepeatDirection.Vertical), WebSysDescription(SR.Item_RepeatDirection) ] public virtual RepeatDirection RepeatDirection { get { object o = ViewState["RepeatDirection"]; return((o == null) ? RepeatDirection.Vertical : (RepeatDirection)o); } set { if (value < RepeatDirection.Horizontal || value > RepeatDirection.Vertical) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatDirection"] = value; } } ///Gets or sets a value that indicates whether the control is displayed /// vertically or horizontally. ////// [ WebCategory("Layout"), DefaultValue(RepeatLayout.Table), WebSysDescription(SR.WebControl_RepeatLayout) ] public virtual RepeatLayout RepeatLayout { get { object o = ViewState["RepeatLayout"]; return((o == null) ? RepeatLayout.Table : (RepeatLayout)o); } set { if (value < RepeatLayout.Table || value > RepeatLayout.Flow) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatLayout"] = value; } } ///Gets or sets a value that indicates whether the control is displayed in /// ///or layout. /// [ WebCategory("Appearance"), DefaultValue(TextAlign.Right), WebSysDescription(SR.WebControl_TextAlign) ] public virtual TextAlign TextAlign { get { object align = ViewState["TextAlign"]; return((align == null) ? TextAlign.Right : (TextAlign)align); } set { if (value < TextAlign.Left || value > TextAlign.Right) { throw new ArgumentOutOfRangeException("value"); } ViewState["TextAlign"] = value; } } ///Gets or sets /// the alignment of the text label associated with each checkbox. ////// /// protected override Style CreateControlStyle() { return new TableStyle(ViewState); } ///Creates a new control style object. ////// /// protected override Control FindControl(string id, int pathOffset) { return this; } #if ORCAS ///Catches post data for each ///in the list. /// protected internal override void LoadControlState(object savedState) { Triplet state = (Triplet)savedState; if (state != null && state.First != null) { base.LoadControlState(state.First); } else { base.LoadControlState(null); } if (state != null && state.Second != null && state.Third != null) { _previousOffset = (int)state.Second; _previousItemCount = (int)state.Third; } else { _previousOffset = 0; _previousItemCount = -1; } } #endif ///Loads the control state for those properties that should persist across postbacks /// even when EnableViewState=false. ////// /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); _controlToRepeat.AutoPostBack = AutoPostBack; _controlToRepeat.CausesValidation = CausesValidation; _controlToRepeat.ValidationGroup = ValidationGroup; if (Page != null) { // ensure postback data for those checkboxes which get unchecked or are different from their default value for (int i=0; i < Items.Count; i++) { _controlToRepeat.ID = i.ToString(NumberFormatInfo.InvariantInfo); Page.RegisterRequiresPostBack(_controlToRepeat); } } } ///Configures the ///prior to rendering on the client. /// /// protected internal override void Render(HtmlTextWriter writer) { #if ORCAS // Don't render anything if the control is empty. // empty table is not xhtml compliant. if (VisibleItemCount == 0) { return; } #else // Don't render anything if the control is empty. // empty table is not xhtml compliant. if (Items.Count == 0 && !EnableLegacyRendering) { return; } #endif RepeatInfo repeatInfo = new RepeatInfo(); Style style = (ControlStyleCreated ? ControlStyle : null); short tabIndex = TabIndex; bool undirtyTabIndex = false; // TabIndex here is special... it needs to be applied to the individual // checkboxes and not the outer control itself // Set the TextAlign property. _controlToRepeat.TextAlign = TextAlign; // cache away the TabIndex property state _controlToRepeat.TabIndex = tabIndex; if (tabIndex != 0) { if (ViewState.IsItemDirty("TabIndex") == false) { undirtyTabIndex = true; } TabIndex = 0; } repeatInfo.RepeatColumns = RepeatColumns; repeatInfo.RepeatDirection = RepeatDirection; // If the device does not support tables, use the flow layout to render if (!DesignMode && !Context.Request.Browser.Tables) { repeatInfo.RepeatLayout = RepeatLayout.Flow; } else { repeatInfo.RepeatLayout = RepeatLayout; } if (repeatInfo.RepeatLayout == RepeatLayout.Flow) { repeatInfo.EnableLegacyRendering = EnableLegacyRendering; } // VSWhidbey 373655 // Temporarily suppress AccessKey so base does not render it on the outside tag _oldAccessKey = AccessKey; AccessKey = String.Empty; repeatInfo.RenderRepeater(writer, (IRepeatInfoUser)this, style, this); // restore the state of AccessKey property AccessKey = _oldAccessKey; // restore the state of the TabIndex property if (tabIndex != 0) { TabIndex = tabIndex; } if (undirtyTabIndex) { ViewState.SetItemDirty("TabIndex", false); } } #if ORCAS ////// Displays the ///on the client. /// /// protected internal override object SaveControlState() { object baseState = base.SaveControlState(); if (baseState != null || _itemCount != -1) { return new Triplet(baseState, _offset, _itemCount); } return null; } #region IItemPaginationInfo implementation int IItemPaginationInfo.FirstVisibleItemIndex { get { return this.FirstVisibleItemIndex; } } protected int FirstVisibleItemIndex { get { return _offset; } } ///Saves the control state for those properties that should persist across postbacks /// even when EnableViewState=false. ////// int IItemPaginationInfo.ItemCount { get { return ItemCount; } } ////// The number of items held by the container for pagination calculations. /// ////// protected virtual int ItemCount { get { EnsureDataBound(); return Items.Count; } } ////// The number of items held by the container for pagination calculations. /// ////// int IItemPaginationInfo.ItemWeight { get { return ItemWeight; } } ////// The weight for pagination calculations for each item of the container. /// Returns a constant value of 100 for CheckBoxList. /// ////// protected virtual int ItemWeight { get { return 100; } } int IItemPaginationInfo.VisibleItemCount { get { return this.VisibleItemCount; } } protected int VisibleItemCount { get { if (_itemCount >= 0) { return _itemCount; } else { return ItemCount; } } } ////// The weight for pagination calculations for each item of the container. /// Returns a constant value of 100 for CheckBoxList. /// ////// void IItemPaginationInfo.SetVisibleItems(int firstItem, int itemCount) { SetVisibleItems(firstItem, itemCount); } ////// Indicates which child items of the container are visible on the current page. /// ////// protected virtual void SetVisibleItems(int firstItem, int itemCount) { _offset = firstItem; _itemCount = itemCount; // This info will be saved into ControlState so that // the list remembers which page it was on when treating postbacks } #endregion #endif ////// Indicates which child items of the container are visible on the current page. /// ////// /// bool IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) { return LoadPostData(postDataKey, postCollection); } ///Processes posted data for the ///control. /// /// protected virtual bool LoadPostData(String postDataKey, NameValueCollection postCollection) { if (IsEnabled == false) { // When a CheckBoxList is disabled, then there is no postback // data for it. Any checked state information has been loaded // via view state. return false; } string strIndex = postDataKey.Substring(UniqueID.Length + 1); int index = Int32.Parse(strIndex, CultureInfo.InvariantCulture); EnsureDataBound(); #if ORCAS // Do not maintain state from the form if the current page changed. if (_previousItemCount != -1 && (index < _previousOffset || index >= _previousOffset + _previousItemCount)) { return false; } #endif // Maintain state from the form if (index >= 0 && index < Items.Count) { ListItem item = Items[index]; if (item.Enabled == false) { return false; } bool newCheckState = (postCollection[postDataKey] != null); if (item.Selected != newCheckState) { item.Selected = newCheckState; // LoadPostData will be invoked for each CheckBox that changed // Suppress multiple change notification and fire only ONE change event if (!_hasNotifiedOfChange) { _hasNotifiedOfChange = true; return true; } } } return false; } ///Processes posted data for the ///control. /// /// void IPostBackDataHandler.RaisePostDataChangedEvent() { RaisePostDataChangedEvent(); } ///Raises when posted data for a control has changed. ////// /// protected virtual void RaisePostDataChangedEvent() { if (AutoPostBack && !Page.IsPostBackEventControlRegistered) { // VSWhidbey 204824 Page.AutoPostBackControl = this; if (CausesValidation) { Page.Validate(ValidationGroup); } } OnSelectedIndexChanged(EventArgs.Empty); } ///Raises when posted data for a control has changed. ////// /// bool IRepeatInfoUser.HasFooter { get { return HasFooter; } } ////// /// protected virtual bool HasFooter { get { return false; } } ////// /// bool IRepeatInfoUser.HasHeader { get { return HasHeader; } } ////// /// protected virtual bool HasHeader { get { return false; } } ////// /// bool IRepeatInfoUser.HasSeparators { get { return HasSeparators; } } ////// /// protected virtual bool HasSeparators { get { return false; } } ////// /// int IRepeatInfoUser.RepeatedItemCount { get { return RepeatedItemCount; } } ////// /// protected virtual int RepeatedItemCount { get { #if ORCAS // If the whole control is contained on a single page, // the count is the number of items. if (VirtualStartPage == VirtualEndPage || _itemCount == -1) { return (Items != null) ? Items.Count : 0; } return _itemCount; #else return (Items != null) ? Items.Count : 0; #endif } } ////// /// Style IRepeatInfoUser.GetItemStyle(ListItemType itemType, int repeatIndex) { return GetItemStyle(itemType, repeatIndex); } protected virtual Style GetItemStyle(ListItemType itemType, int repeatIndex) { return null; } ////// /// Called by the RepeatInfo helper to render each item /// void IRepeatInfoUser.RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { RenderItem(itemType, repeatIndex, repeatInfo, writer); } ////// /// Called by the RepeatInfo helper to render each item /// protected virtual void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { if (repeatIndex == 0) { _cachedIsEnabled = IsEnabled; _cachedRegisterEnabled = (Page != null) && IsEnabled && (SaveSelectedIndicesViewState == false); } #if ORCAS int repeatIndexOffset = repeatIndex + _offset; #else int repeatIndexOffset = repeatIndex; #endif ListItem item = Items[repeatIndexOffset]; // VSWhidbey 403433 Render expando attributes. _controlToRepeat.Attributes.Clear(); if (item.HasAttributes) { foreach (string key in item.Attributes.Keys) { _controlToRepeat.Attributes[key] = item.Attributes[key]; } } _controlToRepeat.ID = repeatIndexOffset.ToString(NumberFormatInfo.InvariantInfo); _controlToRepeat.Text = item.Text; _controlToRepeat.Checked = item.Selected; _controlToRepeat.Enabled = _cachedIsEnabled && item.Enabled; _controlToRepeat.AccessKey = _oldAccessKey; if (_cachedRegisterEnabled && _controlToRepeat.Enabled) { // Store a client-side array of enabled control, so we can re-enable them on // postback (in case they are disabled client-side) // Postback is needed when SelectedIndices is not saved in view state Page.RegisterEnabledControl(_controlToRepeat); } _controlToRepeat.RenderControl(writer); } #if ORCAS [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual int MaximumWeight { get { if (Page != null && Page.Form != null) { return Page.Form.MaximumWeight; } return 0; } } #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.Security.Permissions; using System.Web; using System.Web.UI; ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class CheckBoxList : ListControl, IRepeatInfoUser, INamingContainer, IPostBackDataHandler #if ORCAS ,IItemPaginationInfo, IPaginationContainer #endif { private CheckBox _controlToRepeat; private string _oldAccessKey; private bool _hasNotifiedOfChange; private bool _cachedRegisterEnabled; private bool _cachedIsEnabled; #if ORCAS private int _offset; private int _itemCount = -1; private int _previousOffset; private int _previousItemCount; #endif ///Creates a group of ///controls. /// public CheckBoxList() { #if ORCAS _offset = 0; _itemCount = -1; _previousOffset = 0; _previousItemCount = -1; #endif _controlToRepeat = new CheckBox(); _controlToRepeat.EnableViewState = false; // Whidbey 28457: We need to set a default numeric ID for the case // of an empty checkbox list. It is because the child CheckBox // always registers itself to Page as a PostBackData control and // during postback it will invoke LoadPostData in this class and the // method always assumes the ID is numeric. This default ID setting // has been done in this way since V1. _controlToRepeat.ID = "0"; Controls.Add(_controlToRepeat); } ////// Initializes a new instance of the ///class. /// /// [ WebCategory("Layout"), DefaultValue(-1), WebSysDescription(SR.CheckBoxList_CellPadding) ] public virtual int CellPadding { get { if (ControlStyleCreated == false) { return -1; } return ((TableStyle)ControlStyle).CellPadding; } set { ((TableStyle)ControlStyle).CellPadding = value; } } ////// Gets or sets /// the padding between each item. /// ////// [ WebCategory("Layout"), DefaultValue(-1), WebSysDescription(SR.CheckBoxList_CellSpacing) ] public virtual int CellSpacing { get { if (ControlStyleCreated == false) { return -1; } return ((TableStyle)ControlStyle).CellSpacing; } set { ((TableStyle)ControlStyle).CellSpacing = value; } } internal override bool IsMultiSelectInternal { get { // a CheckBoxList is always multiselect. return true; } } ////// Gets or sets /// the spacing between each item. /// ////// [ WebCategory("Layout"), DefaultValue(0), WebSysDescription(SR.CheckBoxList_RepeatColumns) ] public virtual int RepeatColumns { get { object o = ViewState["RepeatColumns"]; return((o == null) ? 0 : (int)o); } set { if (value < 0) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatColumns"] = value; } } ///Gets or sets the number of columns to repeat. ////// [ WebCategory("Layout"), DefaultValue(RepeatDirection.Vertical), WebSysDescription(SR.Item_RepeatDirection) ] public virtual RepeatDirection RepeatDirection { get { object o = ViewState["RepeatDirection"]; return((o == null) ? RepeatDirection.Vertical : (RepeatDirection)o); } set { if (value < RepeatDirection.Horizontal || value > RepeatDirection.Vertical) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatDirection"] = value; } } ///Gets or sets a value that indicates whether the control is displayed /// vertically or horizontally. ////// [ WebCategory("Layout"), DefaultValue(RepeatLayout.Table), WebSysDescription(SR.WebControl_RepeatLayout) ] public virtual RepeatLayout RepeatLayout { get { object o = ViewState["RepeatLayout"]; return((o == null) ? RepeatLayout.Table : (RepeatLayout)o); } set { if (value < RepeatLayout.Table || value > RepeatLayout.Flow) { throw new ArgumentOutOfRangeException("value"); } ViewState["RepeatLayout"] = value; } } ///Gets or sets a value that indicates whether the control is displayed in /// ///or layout. /// [ WebCategory("Appearance"), DefaultValue(TextAlign.Right), WebSysDescription(SR.WebControl_TextAlign) ] public virtual TextAlign TextAlign { get { object align = ViewState["TextAlign"]; return((align == null) ? TextAlign.Right : (TextAlign)align); } set { if (value < TextAlign.Left || value > TextAlign.Right) { throw new ArgumentOutOfRangeException("value"); } ViewState["TextAlign"] = value; } } ///Gets or sets /// the alignment of the text label associated with each checkbox. ////// /// protected override Style CreateControlStyle() { return new TableStyle(ViewState); } ///Creates a new control style object. ////// /// protected override Control FindControl(string id, int pathOffset) { return this; } #if ORCAS ///Catches post data for each ///in the list. /// protected internal override void LoadControlState(object savedState) { Triplet state = (Triplet)savedState; if (state != null && state.First != null) { base.LoadControlState(state.First); } else { base.LoadControlState(null); } if (state != null && state.Second != null && state.Third != null) { _previousOffset = (int)state.Second; _previousItemCount = (int)state.Third; } else { _previousOffset = 0; _previousItemCount = -1; } } #endif ///Loads the control state for those properties that should persist across postbacks /// even when EnableViewState=false. ////// /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); _controlToRepeat.AutoPostBack = AutoPostBack; _controlToRepeat.CausesValidation = CausesValidation; _controlToRepeat.ValidationGroup = ValidationGroup; if (Page != null) { // ensure postback data for those checkboxes which get unchecked or are different from their default value for (int i=0; i < Items.Count; i++) { _controlToRepeat.ID = i.ToString(NumberFormatInfo.InvariantInfo); Page.RegisterRequiresPostBack(_controlToRepeat); } } } ///Configures the ///prior to rendering on the client. /// /// protected internal override void Render(HtmlTextWriter writer) { #if ORCAS // Don't render anything if the control is empty. // empty table is not xhtml compliant. if (VisibleItemCount == 0) { return; } #else // Don't render anything if the control is empty. // empty table is not xhtml compliant. if (Items.Count == 0 && !EnableLegacyRendering) { return; } #endif RepeatInfo repeatInfo = new RepeatInfo(); Style style = (ControlStyleCreated ? ControlStyle : null); short tabIndex = TabIndex; bool undirtyTabIndex = false; // TabIndex here is special... it needs to be applied to the individual // checkboxes and not the outer control itself // Set the TextAlign property. _controlToRepeat.TextAlign = TextAlign; // cache away the TabIndex property state _controlToRepeat.TabIndex = tabIndex; if (tabIndex != 0) { if (ViewState.IsItemDirty("TabIndex") == false) { undirtyTabIndex = true; } TabIndex = 0; } repeatInfo.RepeatColumns = RepeatColumns; repeatInfo.RepeatDirection = RepeatDirection; // If the device does not support tables, use the flow layout to render if (!DesignMode && !Context.Request.Browser.Tables) { repeatInfo.RepeatLayout = RepeatLayout.Flow; } else { repeatInfo.RepeatLayout = RepeatLayout; } if (repeatInfo.RepeatLayout == RepeatLayout.Flow) { repeatInfo.EnableLegacyRendering = EnableLegacyRendering; } // VSWhidbey 373655 // Temporarily suppress AccessKey so base does not render it on the outside tag _oldAccessKey = AccessKey; AccessKey = String.Empty; repeatInfo.RenderRepeater(writer, (IRepeatInfoUser)this, style, this); // restore the state of AccessKey property AccessKey = _oldAccessKey; // restore the state of the TabIndex property if (tabIndex != 0) { TabIndex = tabIndex; } if (undirtyTabIndex) { ViewState.SetItemDirty("TabIndex", false); } } #if ORCAS ////// Displays the ///on the client. /// /// protected internal override object SaveControlState() { object baseState = base.SaveControlState(); if (baseState != null || _itemCount != -1) { return new Triplet(baseState, _offset, _itemCount); } return null; } #region IItemPaginationInfo implementation int IItemPaginationInfo.FirstVisibleItemIndex { get { return this.FirstVisibleItemIndex; } } protected int FirstVisibleItemIndex { get { return _offset; } } ///Saves the control state for those properties that should persist across postbacks /// even when EnableViewState=false. ////// int IItemPaginationInfo.ItemCount { get { return ItemCount; } } ////// The number of items held by the container for pagination calculations. /// ////// protected virtual int ItemCount { get { EnsureDataBound(); return Items.Count; } } ////// The number of items held by the container for pagination calculations. /// ////// int IItemPaginationInfo.ItemWeight { get { return ItemWeight; } } ////// The weight for pagination calculations for each item of the container. /// Returns a constant value of 100 for CheckBoxList. /// ////// protected virtual int ItemWeight { get { return 100; } } int IItemPaginationInfo.VisibleItemCount { get { return this.VisibleItemCount; } } protected int VisibleItemCount { get { if (_itemCount >= 0) { return _itemCount; } else { return ItemCount; } } } ////// The weight for pagination calculations for each item of the container. /// Returns a constant value of 100 for CheckBoxList. /// ////// void IItemPaginationInfo.SetVisibleItems(int firstItem, int itemCount) { SetVisibleItems(firstItem, itemCount); } ////// Indicates which child items of the container are visible on the current page. /// ////// protected virtual void SetVisibleItems(int firstItem, int itemCount) { _offset = firstItem; _itemCount = itemCount; // This info will be saved into ControlState so that // the list remembers which page it was on when treating postbacks } #endregion #endif ////// Indicates which child items of the container are visible on the current page. /// ////// /// bool IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) { return LoadPostData(postDataKey, postCollection); } ///Processes posted data for the ///control. /// /// protected virtual bool LoadPostData(String postDataKey, NameValueCollection postCollection) { if (IsEnabled == false) { // When a CheckBoxList is disabled, then there is no postback // data for it. Any checked state information has been loaded // via view state. return false; } string strIndex = postDataKey.Substring(UniqueID.Length + 1); int index = Int32.Parse(strIndex, CultureInfo.InvariantCulture); EnsureDataBound(); #if ORCAS // Do not maintain state from the form if the current page changed. if (_previousItemCount != -1 && (index < _previousOffset || index >= _previousOffset + _previousItemCount)) { return false; } #endif // Maintain state from the form if (index >= 0 && index < Items.Count) { ListItem item = Items[index]; if (item.Enabled == false) { return false; } bool newCheckState = (postCollection[postDataKey] != null); if (item.Selected != newCheckState) { item.Selected = newCheckState; // LoadPostData will be invoked for each CheckBox that changed // Suppress multiple change notification and fire only ONE change event if (!_hasNotifiedOfChange) { _hasNotifiedOfChange = true; return true; } } } return false; } ///Processes posted data for the ///control. /// /// void IPostBackDataHandler.RaisePostDataChangedEvent() { RaisePostDataChangedEvent(); } ///Raises when posted data for a control has changed. ////// /// protected virtual void RaisePostDataChangedEvent() { if (AutoPostBack && !Page.IsPostBackEventControlRegistered) { // VSWhidbey 204824 Page.AutoPostBackControl = this; if (CausesValidation) { Page.Validate(ValidationGroup); } } OnSelectedIndexChanged(EventArgs.Empty); } ///Raises when posted data for a control has changed. ////// /// bool IRepeatInfoUser.HasFooter { get { return HasFooter; } } ////// /// protected virtual bool HasFooter { get { return false; } } ////// /// bool IRepeatInfoUser.HasHeader { get { return HasHeader; } } ////// /// protected virtual bool HasHeader { get { return false; } } ////// /// bool IRepeatInfoUser.HasSeparators { get { return HasSeparators; } } ////// /// protected virtual bool HasSeparators { get { return false; } } ////// /// int IRepeatInfoUser.RepeatedItemCount { get { return RepeatedItemCount; } } ////// /// protected virtual int RepeatedItemCount { get { #if ORCAS // If the whole control is contained on a single page, // the count is the number of items. if (VirtualStartPage == VirtualEndPage || _itemCount == -1) { return (Items != null) ? Items.Count : 0; } return _itemCount; #else return (Items != null) ? Items.Count : 0; #endif } } ////// /// Style IRepeatInfoUser.GetItemStyle(ListItemType itemType, int repeatIndex) { return GetItemStyle(itemType, repeatIndex); } protected virtual Style GetItemStyle(ListItemType itemType, int repeatIndex) { return null; } ////// /// Called by the RepeatInfo helper to render each item /// void IRepeatInfoUser.RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { RenderItem(itemType, repeatIndex, repeatInfo, writer); } ////// /// Called by the RepeatInfo helper to render each item /// protected virtual void RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer) { if (repeatIndex == 0) { _cachedIsEnabled = IsEnabled; _cachedRegisterEnabled = (Page != null) && IsEnabled && (SaveSelectedIndicesViewState == false); } #if ORCAS int repeatIndexOffset = repeatIndex + _offset; #else int repeatIndexOffset = repeatIndex; #endif ListItem item = Items[repeatIndexOffset]; // VSWhidbey 403433 Render expando attributes. _controlToRepeat.Attributes.Clear(); if (item.HasAttributes) { foreach (string key in item.Attributes.Keys) { _controlToRepeat.Attributes[key] = item.Attributes[key]; } } _controlToRepeat.ID = repeatIndexOffset.ToString(NumberFormatInfo.InvariantInfo); _controlToRepeat.Text = item.Text; _controlToRepeat.Checked = item.Selected; _controlToRepeat.Enabled = _cachedIsEnabled && item.Enabled; _controlToRepeat.AccessKey = _oldAccessKey; if (_cachedRegisterEnabled && _controlToRepeat.Enabled) { // Store a client-side array of enabled control, so we can re-enable them on // postback (in case they are disabled client-side) // Postback is needed when SelectedIndices is not saved in view state Page.RegisterEnabledControl(_controlToRepeat); } _controlToRepeat.RenderControl(writer); } #if ORCAS [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual int MaximumWeight { get { if (Page != null && Page.Form != null) { return Page.Form.MaximumWeight; } return 0; } } #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SafeProcessHandle.cs
- RijndaelManagedTransform.cs
- ReadOnlyTernaryTree.cs
- Terminate.cs
- TypeElement.cs
- OdbcDataReader.cs
- WeakEventManager.cs
- SplitterEvent.cs
- FileUpload.cs
- StyleReferenceConverter.cs
- DataGridViewIntLinkedList.cs
- PathSegmentCollection.cs
- RealProxy.cs
- UDPClient.cs
- ResourceSetExpression.cs
- TransformerTypeCollection.cs
- MemberDescriptor.cs
- EncoderNLS.cs
- BaseCodePageEncoding.cs
- TableParagraph.cs
- TargetInvocationException.cs
- TagMapInfo.cs
- SchemaElementLookUpTableEnumerator.cs
- TypedTableHandler.cs
- NativeMethods.cs
- QueryResponse.cs
- SymmetricKey.cs
- MembershipPasswordException.cs
- DeflateStream.cs
- TemplateBindingExtensionConverter.cs
- IUnknownConstantAttribute.cs
- WindowsSlider.cs
- DependencyStoreSurrogate.cs
- NullReferenceException.cs
- MenuItemStyleCollection.cs
- ListViewGroup.cs
- Pair.cs
- Expression.cs
- StickyNoteHelper.cs
- CodeFieldReferenceExpression.cs
- FixedBufferAttribute.cs
- SecurityKeyIdentifier.cs
- PhysicalAddress.cs
- TableDetailsCollection.cs
- SqlDataSourceQuery.cs
- TimeStampChecker.cs
- XsdCachingReader.cs
- PathFigureCollection.cs
- ValidationEventArgs.cs
- ObjectDataSourceMethodEventArgs.cs
- COM2Properties.cs
- ProcessModelInfo.cs
- GeometryHitTestParameters.cs
- NumericExpr.cs
- NativeRightsManagementAPIsStructures.cs
- EntityCommand.cs
- VSWCFServiceContractGenerator.cs
- _ListenerAsyncResult.cs
- SByteConverter.cs
- DrawingBrush.cs
- SafeHGlobalHandleCritical.cs
- Quad.cs
- XmlDocument.cs
- UInt16.cs
- ListViewItemSelectionChangedEvent.cs
- HyperLinkDataBindingHandler.cs
- LassoSelectionBehavior.cs
- ResizeGrip.cs
- FunctionDetailsReader.cs
- DateTimePickerDesigner.cs
- CqlGenerator.cs
- DelayLoadType.cs
- SqlNotificationEventArgs.cs
- SrgsRuleRef.cs
- PointF.cs
- GetPageCompletedEventArgs.cs
- DataTableMappingCollection.cs
- Win32PrintDialog.cs
- Style.cs
- ToolStripItem.cs
- BordersPage.cs
- bindurihelper.cs
- EncodingTable.cs
- DataSourceConverter.cs
- HtmlShim.cs
- DataRecord.cs
- DataGridViewControlCollection.cs
- JournalEntryStack.cs
- StateDesigner.Layouts.cs
- ResponseStream.cs
- HybridCollection.cs
- basemetadatamappingvisitor.cs
- DateBoldEvent.cs
- RepeaterItemCollection.cs
- HtmlElementCollection.cs
- CFStream.cs
- FixedPageAutomationPeer.cs
- PngBitmapEncoder.cs
- AttachedAnnotationChangedEventArgs.cs
- DemultiplexingClientMessageFormatter.cs