Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / Adapters / HtmlSelectionListAdapter.cs / 1305376 / HtmlSelectionListAdapter.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.MobileControls; using System.Collections.Specialized; using System.Diagnostics; using System.Security.Permissions; #if COMPILING_FOR_SHIPPED_SOURCE namespace System.Web.UI.MobileControls.ShippedAdapterSource #else namespace System.Web.UI.MobileControls.Adapters #endif { /* * HtmlSelectionListAdapter provides the html device functionality for SelectionList controls. * * Copyright (c) 2000 Microsoft Corporation */ ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class HtmlSelectionListAdapter : HtmlControlAdapter { /// protected new SelectionList Control { get { return (SelectionList)base.Control; } } /// public override void OnInit(EventArgs e) { } /// public override void Render(HtmlMobileTextWriter writer) { MobileListItemCollection items = Control.Items; ListSelectType selectType = Control.SelectType; if (items.Count == 0 && selectType != ListSelectType.ListBox && selectType != ListSelectType.MultiSelectListBox) { return; } int selectedIndex = Control.SelectedIndex; String renderName; if(Device.RequiresAttributeColonSubstitution) { renderName = Control.UniqueID.Replace(':', ','); } else { renderName = Control.UniqueID; } switch(selectType) { case ListSelectType.DropDown: case ListSelectType.ListBox: case ListSelectType.MultiSelectListBox: if (items.Count == 0 && !Device.CanRenderEmptySelects) { break; } writer.EnterLayout(Style); writer.WriteBeginTag("select"); if (selectType == ListSelectType.MultiSelectListBox) { writer.Write(" multiple"); } if (selectType == ListSelectType.ListBox || selectType == ListSelectType.MultiSelectListBox) { writer.WriteAttribute("size", Control.Rows.ToString(CultureInfo.InvariantCulture)); } writer.WriteAttribute("name", renderName); writer.Write(">"); for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { MobileListItem item = items[itemIndex]; writer.WriteBeginTag("option"); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex)) { writer.Write(" selected>"); } else { writer.Write(">"); } writer.WriteEncodedText(item.Text); writer.WriteLine(""); } writer.Write(""); if(Device.HidesRightAlignedMultiselectScrollbars && selectType == ListSelectType.MultiSelectListBox) { // nested if for perf if((Alignment)Style[Style.AlignmentKey, true] == Alignment.Right) { writer.Write(" "); } } writer.WriteLine(""); if (!Page.DesignMode) { writer.ExitLayout(Style, Control.BreakAfter); } else { writer.ExitLayout(Style, false); } break; case ListSelectType.Radio: case ListSelectType.CheckBox: String selectTypeString = (selectType == ListSelectType.Radio) ? "radio" : "checkbox"; Alignment alignment = (Alignment)Style[Style.AlignmentKey, true]; if(!Device.Tables || alignment == Alignment.Left || alignment == Alignment.NotSet) { writer.EnterStyle(Style); bool breakAfter = false; for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { if(breakAfter) { writer.WriteBreak(); } MobileListItem item = items[itemIndex]; writer.WriteBeginTag("input"); writer.WriteAttribute("type", selectTypeString); writer.WriteAttribute("name", renderName); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex) && Device.SupportsUncheck) { writer.Write(" checked>"); } else { writer.Write(">"); } writer.WriteEncodedText(item.Text); breakAfter = true; } writer.ExitStyle(Style, Control.BreakAfter); } else // Device supports tables and alignment is non default. { Wrapping wrapping = (Wrapping) Style[Style.WrappingKey , true]; bool nowrap = (wrapping == Wrapping.NoWrap); writer.EnterLayout(Style); writer.WriteFullBeginTag("table"); writer.BeginStyleContext(); for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { MobileListItem item = items[itemIndex]; writer.WriteFullBeginTag("tr"); writer.WriteBeginTag("td"); if(nowrap) { writer.WriteAttribute("nowrap","true"); } writer.Write(">"); writer.WriteBeginTag("input"); writer.WriteAttribute("type", selectTypeString); writer.WriteAttribute("name", renderName); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex) && Device.SupportsUncheck) { writer.Write(" checked>"); } else { writer.Write(">"); } writer.MarkStyleContext(); writer.EnterFormat(Style); writer.WriteEncodedText(item.Text); writer.ExitFormat(Style); writer.UnMarkStyleContext(); writer.WriteEndTag("td"); writer.WriteEndTag("tr"); } writer.WriteEndTag("table"); writer.EndStyleContext(); writer.ExitFormat(Style, Control.BreakAfter); } break; } } // Parse the HTML posted data appropriately. /// public override bool LoadPostData(String key, NameValueCollection data, Object controlPrivateData, out bool dataChanged) { String[] selectedItems = data.GetValues(key); Debug.Assert (String.IsNullOrEmpty(Control.Form.Action), "Cross page post (!IsPostBack) assumed when Form.Action nonempty." + "LoadPostData should not have been be called."); // If no post data is included, and the control is either not visible, or // not on active form, this call should be ignored (the lack of post data // is not due to there being no selection, but due to there being no // markup rendered that could generate the post data). if (selectedItems == null && (!Control.Visible || Control.Form != Control.MobilePage.ActiveForm)) { dataChanged = false; return true; } // Case where nothing is selected. if(selectedItems == null || (selectedItems.Length == 1 && (selectedItems[0] != null && selectedItems[0].Length == 0))) { selectedItems = new String[]{}; } int[] selectedItemIndices = new int[selectedItems.Length]; // Note: controlPrivateData is selected indices from the viewstate. int[] originalSelectedIndices = (int[])controlPrivateData; dataChanged = false; // If SelectType is DropDown && nothing was selected, select // first elt. (Non-mobile DropDown does same by getting SelectedIndex). if(Control.SelectType == ListSelectType.DropDown && originalSelectedIndices.Length == 0 && Control.Items.Count > 0) { Control.Items[0].Selected = true; originalSelectedIndices = new int[]{0}; } for(int i = 0; i < selectedItems.Length; i++) { selectedItemIndices[i] = Int32.Parse(selectedItems[i], CultureInfo.InvariantCulture); } // Do not assume posted selected indices are ascending. // We do know originalSelectedIndices are ascending. Array.Sort(selectedItemIndices); // Check whether selections have changed. if(selectedItemIndices.Length != originalSelectedIndices.Length) { dataChanged = true; } else { for(int i = 0; i < selectedItems.Length; i++) { if(selectedItemIndices[i] != originalSelectedIndices[i]) { dataChanged = true; } } } for (int i = 0; i < Control.Items.Count; i++) { Control.Items[i].Selected = false; } for(int i = 0; i < selectedItemIndices.Length; i++) { Control.Items[selectedItemIndices[i]].Selected = true; } return true; } private void WriteItemValueAttribute(HtmlTextWriter writer, int index, String value) { if (Page.DesignMode || String.IsNullOrEmpty(Control.Form.Action)) { writer.WriteAttribute("value", index.ToString(CultureInfo.InvariantCulture)); } else { writer.WriteAttribute("value", value, true /*encode*/); } } /// protected override void RenderAsHiddenInputField(HtmlMobileTextWriter writer) { // Optimization - if viewstate is enabled for this control, and the // postback returns to this page, we just let it do the trick. // One catch though - if the control is multiselect, it always // interprets return values, so we do need to write out. if (Control.IsMultiSelect || Control.Form.Action.Length > 0 || !IsViewStateEnabled()) { String uniqueID = Control.UniqueID; MobileListItemCollection items = Control.Items; for (int i = 0; i < items.Count; i++) { if (items[i].Selected) { writer.WriteHiddenField(uniqueID, i.ToString(CultureInfo.InvariantCulture)); } } } } private bool IsViewStateEnabled() { Control ctl = Control; while (ctl != null) { if (!ctl.EnableViewState) { return false; } ctl = ctl.Parent; } return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.MobileControls; using System.Collections.Specialized; using System.Diagnostics; using System.Security.Permissions; #if COMPILING_FOR_SHIPPED_SOURCE namespace System.Web.UI.MobileControls.ShippedAdapterSource #else namespace System.Web.UI.MobileControls.Adapters #endif { /* * HtmlSelectionListAdapter provides the html device functionality for SelectionList controls. * * Copyright (c) 2000 Microsoft Corporation */ ///[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class HtmlSelectionListAdapter : HtmlControlAdapter { /// protected new SelectionList Control { get { return (SelectionList)base.Control; } } /// public override void OnInit(EventArgs e) { } /// public override void Render(HtmlMobileTextWriter writer) { MobileListItemCollection items = Control.Items; ListSelectType selectType = Control.SelectType; if (items.Count == 0 && selectType != ListSelectType.ListBox && selectType != ListSelectType.MultiSelectListBox) { return; } int selectedIndex = Control.SelectedIndex; String renderName; if(Device.RequiresAttributeColonSubstitution) { renderName = Control.UniqueID.Replace(':', ','); } else { renderName = Control.UniqueID; } switch(selectType) { case ListSelectType.DropDown: case ListSelectType.ListBox: case ListSelectType.MultiSelectListBox: if (items.Count == 0 && !Device.CanRenderEmptySelects) { break; } writer.EnterLayout(Style); writer.WriteBeginTag("select"); if (selectType == ListSelectType.MultiSelectListBox) { writer.Write(" multiple"); } if (selectType == ListSelectType.ListBox || selectType == ListSelectType.MultiSelectListBox) { writer.WriteAttribute("size", Control.Rows.ToString(CultureInfo.InvariantCulture)); } writer.WriteAttribute("name", renderName); writer.Write(">"); for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { MobileListItem item = items[itemIndex]; writer.WriteBeginTag("option"); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex)) { writer.Write(" selected>"); } else { writer.Write(">"); } writer.WriteEncodedText(item.Text); writer.WriteLine(""); } writer.Write(""); if(Device.HidesRightAlignedMultiselectScrollbars && selectType == ListSelectType.MultiSelectListBox) { // nested if for perf if((Alignment)Style[Style.AlignmentKey, true] == Alignment.Right) { writer.Write(" "); } } writer.WriteLine(""); if (!Page.DesignMode) { writer.ExitLayout(Style, Control.BreakAfter); } else { writer.ExitLayout(Style, false); } break; case ListSelectType.Radio: case ListSelectType.CheckBox: String selectTypeString = (selectType == ListSelectType.Radio) ? "radio" : "checkbox"; Alignment alignment = (Alignment)Style[Style.AlignmentKey, true]; if(!Device.Tables || alignment == Alignment.Left || alignment == Alignment.NotSet) { writer.EnterStyle(Style); bool breakAfter = false; for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { if(breakAfter) { writer.WriteBreak(); } MobileListItem item = items[itemIndex]; writer.WriteBeginTag("input"); writer.WriteAttribute("type", selectTypeString); writer.WriteAttribute("name", renderName); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex) && Device.SupportsUncheck) { writer.Write(" checked>"); } else { writer.Write(">"); } writer.WriteEncodedText(item.Text); breakAfter = true; } writer.ExitStyle(Style, Control.BreakAfter); } else // Device supports tables and alignment is non default. { Wrapping wrapping = (Wrapping) Style[Style.WrappingKey , true]; bool nowrap = (wrapping == Wrapping.NoWrap); writer.EnterLayout(Style); writer.WriteFullBeginTag("table"); writer.BeginStyleContext(); for(int itemIndex = 0; itemIndex < items.Count; itemIndex++) { MobileListItem item = items[itemIndex]; writer.WriteFullBeginTag("tr"); writer.WriteBeginTag("td"); if(nowrap) { writer.WriteAttribute("nowrap","true"); } writer.Write(">"); writer.WriteBeginTag("input"); writer.WriteAttribute("type", selectTypeString); writer.WriteAttribute("name", renderName); WriteItemValueAttribute(writer, itemIndex, item.Value); if (item.Selected && (Control.IsMultiSelect || itemIndex == selectedIndex) && Device.SupportsUncheck) { writer.Write(" checked>"); } else { writer.Write(">"); } writer.MarkStyleContext(); writer.EnterFormat(Style); writer.WriteEncodedText(item.Text); writer.ExitFormat(Style); writer.UnMarkStyleContext(); writer.WriteEndTag("td"); writer.WriteEndTag("tr"); } writer.WriteEndTag("table"); writer.EndStyleContext(); writer.ExitFormat(Style, Control.BreakAfter); } break; } } // Parse the HTML posted data appropriately. /// public override bool LoadPostData(String key, NameValueCollection data, Object controlPrivateData, out bool dataChanged) { String[] selectedItems = data.GetValues(key); Debug.Assert (String.IsNullOrEmpty(Control.Form.Action), "Cross page post (!IsPostBack) assumed when Form.Action nonempty." + "LoadPostData should not have been be called."); // If no post data is included, and the control is either not visible, or // not on active form, this call should be ignored (the lack of post data // is not due to there being no selection, but due to there being no // markup rendered that could generate the post data). if (selectedItems == null && (!Control.Visible || Control.Form != Control.MobilePage.ActiveForm)) { dataChanged = false; return true; } // Case where nothing is selected. if(selectedItems == null || (selectedItems.Length == 1 && (selectedItems[0] != null && selectedItems[0].Length == 0))) { selectedItems = new String[]{}; } int[] selectedItemIndices = new int[selectedItems.Length]; // Note: controlPrivateData is selected indices from the viewstate. int[] originalSelectedIndices = (int[])controlPrivateData; dataChanged = false; // If SelectType is DropDown && nothing was selected, select // first elt. (Non-mobile DropDown does same by getting SelectedIndex). if(Control.SelectType == ListSelectType.DropDown && originalSelectedIndices.Length == 0 && Control.Items.Count > 0) { Control.Items[0].Selected = true; originalSelectedIndices = new int[]{0}; } for(int i = 0; i < selectedItems.Length; i++) { selectedItemIndices[i] = Int32.Parse(selectedItems[i], CultureInfo.InvariantCulture); } // Do not assume posted selected indices are ascending. // We do know originalSelectedIndices are ascending. Array.Sort(selectedItemIndices); // Check whether selections have changed. if(selectedItemIndices.Length != originalSelectedIndices.Length) { dataChanged = true; } else { for(int i = 0; i < selectedItems.Length; i++) { if(selectedItemIndices[i] != originalSelectedIndices[i]) { dataChanged = true; } } } for (int i = 0; i < Control.Items.Count; i++) { Control.Items[i].Selected = false; } for(int i = 0; i < selectedItemIndices.Length; i++) { Control.Items[selectedItemIndices[i]].Selected = true; } return true; } private void WriteItemValueAttribute(HtmlTextWriter writer, int index, String value) { if (Page.DesignMode || String.IsNullOrEmpty(Control.Form.Action)) { writer.WriteAttribute("value", index.ToString(CultureInfo.InvariantCulture)); } else { writer.WriteAttribute("value", value, true /*encode*/); } } /// protected override void RenderAsHiddenInputField(HtmlMobileTextWriter writer) { // Optimization - if viewstate is enabled for this control, and the // postback returns to this page, we just let it do the trick. // One catch though - if the control is multiselect, it always // interprets return values, so we do need to write out. if (Control.IsMultiSelect || Control.Form.Action.Length > 0 || !IsViewStateEnabled()) { String uniqueID = Control.UniqueID; MobileListItemCollection items = Control.Items; for (int i = 0; i < items.Count; i++) { if (items[i].Selected) { writer.WriteHiddenField(uniqueID, i.ToString(CultureInfo.InvariantCulture)); } } } } private bool IsViewStateEnabled() { Control ctl = Control; while (ctl != null) { if (!ctl.EnableViewState) { return false; } ctl = ctl.Parent; } return true; } } } // 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
- ColorTranslator.cs
- UpdatePanel.cs
- ArithmeticException.cs
- RecordsAffectedEventArgs.cs
- RegexTree.cs
- DataReceivedEventArgs.cs
- TableCellCollection.cs
- CodeDelegateCreateExpression.cs
- XsltFunctions.cs
- SoapTransportImporter.cs
- SiteMapDataSource.cs
- SpotLight.cs
- ConsoleTraceListener.cs
- BitmapFrame.cs
- HandledMouseEvent.cs
- CursorInteropHelper.cs
- WebPartPersonalization.cs
- MailMessageEventArgs.cs
- XmlIlGenerator.cs
- SymbolResolver.cs
- WinFormsUtils.cs
- HelloMessage11.cs
- Exceptions.cs
- PeerServiceMessageContracts.cs
- SafeIUnknown.cs
- GroupItemAutomationPeer.cs
- IUnknownConstantAttribute.cs
- AddInAttribute.cs
- TransformerInfoCollection.cs
- RsaSecurityToken.cs
- Point3DAnimation.cs
- TemplateInstanceAttribute.cs
- ClientRolePrincipal.cs
- NetStream.cs
- ObjectNotFoundException.cs
- WebPartTransformerAttribute.cs
- DataTableMapping.cs
- PKCS1MaskGenerationMethod.cs
- DataRelationCollection.cs
- CompositeActivityTypeDescriptor.cs
- Array.cs
- XmlDataSourceNodeDescriptor.cs
- RootBrowserWindowAutomationPeer.cs
- CollectionDataContract.cs
- TraceListener.cs
- ContainerAction.cs
- WebPartAddingEventArgs.cs
- ComponentEditorForm.cs
- CompilationUtil.cs
- odbcmetadatacollectionnames.cs
- PasswordBox.cs
- TemplatedWizardStep.cs
- AnonymousIdentificationSection.cs
- DependencyObject.cs
- WebPartAuthorizationEventArgs.cs
- fixedPageContentExtractor.cs
- StateItem.cs
- ToolbarAUtomationPeer.cs
- BitmapFrame.cs
- XMLSchema.cs
- SpnegoTokenProvider.cs
- ObjectDataSourceMethodEventArgs.cs
- Error.cs
- ObjectQuery.cs
- FindCriteria11.cs
- SystemSounds.cs
- X509CertificateChain.cs
- CompositeActivityValidator.cs
- TCEAdapterGenerator.cs
- DiagnosticsConfigurationHandler.cs
- SBCSCodePageEncoding.cs
- ReflectionPermission.cs
- TextParagraphProperties.cs
- CompositionTarget.cs
- ReadOnlyDictionary.cs
- PageParserFilter.cs
- MessageSecurityTokenVersion.cs
- SqlDataSourceQuery.cs
- TreeNodeConverter.cs
- DbQueryCommandTree.cs
- RtType.cs
- XmlAnyElementAttribute.cs
- InheritanceRules.cs
- VirtualizingPanel.cs
- BamlRecords.cs
- DataServiceQueryProvider.cs
- DataGridViewRowHeaderCell.cs
- PerformanceCounterPermissionAttribute.cs
- UIAgentAsyncBeginRequest.cs
- PerspectiveCamera.cs
- GlobalDataBindingHandler.cs
- Canvas.cs
- ThreadExceptionEvent.cs
- DragEvent.cs
- PersistenceException.cs
- ScopelessEnumAttribute.cs
- ActivationArguments.cs
- EntityUtil.cs
- EncodingStreamWrapper.cs
- WindowShowOrOpenTracker.cs