Home     About PeterBlum.com     Policies     Download a Licensed Product     Newsletter

Release History for Peter's Data Entry Suite v4.0.1


11/21/2011 Peter's Data Entry Suite 4.0.7 Update
Breaking changes
  • PageSecurityValidator now sets the DetectInjection property to true on ParameterRule, HiddenFieldRule, and CookieRule objects.
    DetectInjection is applied when these objects have their DataType property set to Ignore or String. The documentation previously said DetectInjection defaults to true, but the code defaulted to false. This not only corrects the documentation with the code, but chooses the more protective approach of enabling security.
    This is a breaking change for users who have defined these objects with DataType=Ignore or String, and do not want DetectInjection to be true. If your Rule object explicitly sets DetectInjection to false, you're code will not break. You should review your PageValidationSecurity controls for objects defined in their ParameterRules, HiddenFieldRules, and CookieRules objects. Cases to look for:
    • The DataType property is not assigned. It uses Ignore as its default.
    • The DataType property is assigned to Ignore or String.
    • The DetectInjection property is not assigned. Determine if you want to protect against SQL Injection and Cross Site Script injection attacks (recommended). If you do not, set this property to false.
  • The PageSecurityValidator's new DetectDatabaseElementNamesInQueryString property impacts query string parameters intended to accept strings, when a string it allows is also defined in the <databaselementnames> node of the master.config file.
    Look for any query string parameter that accepts a string type. If it should accept one of your database element names, set this property to false and use the ParameterRule object with its DetectInjection property set to true. DetectInjection applies a more complex algorithm to determine if a database element name is legal or not.
  • New property on PageSecurityValidator: DetectDatabaseElementNamesInQueryString. When true, look at the entire query string for any value defined in the <databaseelementnames> node of the master.config file and report an error if found. It defaults to true and may be a breaking change. See above.
    This property is in response to the lizamoon attack (starting in March 2011) which creates an update statement using table and field names it already extracted from a prior attack on your database's master tables:
    update [your table name] set [your field name] = REPLACE(and so forth)
  • The TextBox.DisablePaste property now works with FireFox.
  • The EnterSubmitsControlID property on TextBoxes and NativeControlExtender now support LinkButtons on FireFox.
  • DES Buttons offer MayMoveOnClick property but it was not supported when CausesValidation=false. It is now supported in that case.
  • The Alert shown by the PageManager.ShowAlertOnSubmit and PeterBlum.DES.Globals.Page.ShowAlertOnSubmit properties now supports the {COUNT} and {COUNT:singular:plural} tokens. They show the number of errors listed.

Bug Fixes
  • Internet Explorer 9 reported a javascript error when loading pages that used scripts associated with date and time data.
  • When using AJAX to preload features, the preload option "TimeTextBoxes" needed to load additional scripts when there was no DateTextBox also on the page.
  • When using AJAX with a CalculationController with an attached validator, the validator would not see the CalculationController after a callback.
  • When using the ConditionCalcItem on a CalculationController, and the condition was not one of the most common ones, a javascript error occurred.
  • When using the NumericTextBoxCalcItem on a CalculationController, and the textbox used was a PercentTextBox, the value from the textbox was not included in the calculation.
  • The PageManager.HintManager.PopupOnFocusDelay property was ignored.
  • When using the CombinedErrorMessages control with its NoErrorFormatter setup, the NoErrorFormatter would not always appear based on the setup.
  • When using the System.Web.UI.WebControls.RequiredFieldValidator with a DateTextBox, some cases had javascript errors.
  • When using native button controls with Medium Trust security on your app, a security exception may have occurred.
  • The ValidationSummary would draw a <br /> tag if there was HeaderText to show but no body (DisplayMode=None) and no footer. It left an extra line.
  • The PeterBlum.DES.Globals.Page.SubmitHidesOtherValidationGroups property was not considered during an AJAX callback. When its false, it should redraw other validation groups. It did not.
  • When the page gets style sheets by inserting <% PeterBlum.DES.StyleSheetManager.GetLinkTags() %>, it did not apply XHTML formatting to the resulting Link tag.
  • Spinners on various textboxes advanced by 2 instead of by 1 when clicking very quickly on most browsers.
  • Chrome and later Safari browsers positioned the popup calendar's toggle button much lower than it should be. This is because the style="align:top;" was used for all browsers and these two browsers worked differently. Now align:text-top is used for these browsers. This change also effects the popup toggle for the MonthYearPicker with the Calendar control.

8/2/2010 Peter's Data Entry Suite 4.0.6 Update
Telerik RadControls for ASP.NET AJAX users will need to replace the Telerik_Web_UI.config file after installing any version starting at 2009.2.821, due to some API name changes made by Telerik.
Get the updated file from the [DES product folder]/Third Party Support/Telerik RadControls/Telerik_Web_UI.config.
Copy it over the existing file in [web application]/DES/.
Restart the application.

  • Support of ASP.NET 4 issue where ClientIDMode=Predictable is setup on these controls, any container control, the page, or globally.
  • The Calendar's Expanded Day View can now be popped up by a click as an alternative to a mouse over. Set Calendar.ExpandedFormatter.PopupOnClick to true.
  • When your host uses a Medium trust mode, you can get a SecurityPermission exception referring to ConfigurationPermission. Add this entry to the <appSettings> section of your web.config file:
     <add key="DES_DisableHttpHandlerCheck" value="" />

Dynamic Data Enhancements
  • Reworked how to pass properties to FieldTemplates from DES.UIHintAttribute, DES.DynamicField, DES.DynamicControl, and DataFieldInPattern. It uses the same properties more efficiently and programmatic support is better. In addition, DES.DynamicField did not correctly support this feature until now.
  • New FieldTemplate for AJAX Control Toolkit (May 2009) users: Html_Edit.ascx. It uses the new HTMLEditor control.
  • Support for CategoryAttribute in your field-level business logic. Use categories to define scaffolding groups and to select NamedStyles in PatternTemplates. With NamedStyles, you can differentiate certain fields such as the "Name" field from others with a different style sheet by creating a Category.
  • ScaffoldColumnAttribute can specify scaffolding by mode: ReadOnly, Edit, and Insert.
  • Security roles supported. Includes the TableRestrictionAttribute and ColumnRestrictionAttribute for your metadata and NamedStyles can specify a role.
  • CombinedErrorMessage control using a PopupErrorFormatter will now refresh as errors change when the PopupView is already open.
  • When using the FSCOnCommand and MultiFSCOnCommand controls, the initial appearance of controls to change was unclear. Did the control establish them or not? Now it establishes them by default and offers the SetInitialAppearance property to change this behavior.

Bug Fixes
  • Internet Explorer 8 handled setting the "innerHTML" differently, preventing event handlers from being inserted once the page load is complete. This broke the ClientSideCreatesHTML property set to "FirstPopup" on any control that can popup. It also broke the close box on the Expanded Date View popup for the Calendar control.
  • Popup calendar had sizing issues when using the MultiMonthColumnCount property. The field with the month name was 2 pixels too wide. FireFox and Opera needed better sizing of the overall width to avoid months overlapping the right edge of the control.
  • When a TextBox using ValueWhenBlankCssClass is updated in an AJAX callback and it has an associated validator that changes the style of the textbox to show an error, the ValueWhenBlankCssClass was not shown after the callback until the user visited the field.
  • When the page is scrolled, Safari and Opera sometimes incorrectly positioned any popup if the popup is contained in a style="position:fixed" element
  • FireFox 3 would allow popups to extend beyond the visible area of the page. It should have shifted into the page, like the other browsers do.
  • The CreditCardNumberValidator was documented to have the CleanedUpNumber property. It is now available.
  • Input security Script Injection did not detect the <h1> - <h6> as HTML tags to validate.
  • In cultures that use ASCII 160 for the group separator character, validation of any numeric textbox may consider the letter "A" as legal in the number. Found with the Czech (cs-CZ) culture.
  • The CalculationController.LabelToken property did not work correct after a postback or when the token was "{0}".
  • When a DES TextBox has AutoPostBack=true and AutoPostBackValidates=false, it still attempted to perform client-side validation on the textbox prior to a postback.
  • The MultiSelectionCalendar allowed selections prior to the MinDate and after the MaxDate property values.
  • The CalculationController sometimes had a slight rounding error when using the Rounding mode of currency.
  • When the DateTextBox uses the RangeEndSetsMinDate property, it was incorrectly setting it one date too early.
  • On a MultiSegmentDataEntry control where segments are textboxes and TabOnMaxLength is true, sometimes moving to a segment that has the maximum text autotabbed over that segment.

6/8/2009 Peter's Data Entry Suite 4.0.5 Update
Breaking Changes
  • For Input Security users. When the FieldSecurityValidator or PageSecurityValidator have their HtmlTagMode property set to IllegalExceptTags and their HTMLTags property set to "", the behavior has changed. Previously it treated all tags not declared in the <illegaltags> section of the config file as legal. Now it treats them all as illegal, which makes more sense. The HTMLTagMode and HTMLTags properties default to IllegalExceptTags and "" respectively, so if you are using their default values and you want to allow all tags not in the config file to be accepted, you must change HTMLTagMode to AllLegal.
  • For DES Dynamic Data Users. There is a major overhaul of PageTemplates and the DynamicDataManager control. The locations of the PageTemplates and FieldTemplates folders have changed as well. If you have customized the PageTemplate files, be prepared to migrate your changes into the new PageTemplate files.
  • The native ImageButton control and as a result, DES's ImageButton control, failed to fire their Click or Command event handlers when using FireFox (any version) if the browser could not load the image. They may have left ImageUrl unassigned, it had an invalid URL, or the server failed to retrieve the image. DES's ImageButton now fires the Click and Command event handlers in this case.
  • Recognizes the Google Chrome browser and works correctly both in scripts and appearance. The TrueBrowser class now identifies three separate values for various related browsers: AppleWebKit (the underlying technology for both Safari and Chrome), Safari, and Chrome.
  • LocalizableLabel has enhanced the AssociatedControlID property. It now works with an ID being in any ancestor naming container. Plus the new AssociatedControl property where you can assign a reference to the other control found in any naming container.
  • When using multiple validation groups, clicking on a submit button would not hide the validation errors associated with other validation groups. This could be distracting to the user since they will try to fix errors unrelated to the validation group. Now it clears those errors. If you like the previous way, set PeterBlum.DES.Globals.Page.SubmitHidesOtherValidationGroups to false in Page_Load.
  • When using the ExtraControlsRunThisAction property on a validator combined with the ChangeStyleOnControlsWithError property, controls in the ExtraControlsRunThisAction property would get their style sheet class changed. This behavior doesn't seem right and has been turned off by default. If you like the previous way, set PeterBlum.DES.Globals.Page.ChangeStyleOnControlsWithErrorIncludesExtraControls to true in Page_Load.
  • Two new javascript functions available to change the appearance of a validator: DES_UpdVal() and DES_HideVal().
  • When using the ShowAlertOnChange property (on PageManager or the Globals.Page object), it used to show the ErrorMessage property on the validator. The SummaryErrorMessage is usually more complete. So now it shows the SummaryErrorMessage by default (falling back to the ErrorMessage property when SummaryErrorMessage is blank). You can return to using only the ErrorMessage property by setting AlertShowsSummaryMessage to false in the PageManager or Globals.Page. It can be set globally with the DefaultAlertShowsSummaryMessage property in the Global Settings Editor.
  • New property on Calendar and MultipleCalendar: SelectedOtherMonthCssClass. Lets you assign a different style sheet class to day cells in the "other month" when using Multiple Month View. Without it, those day cells do not show any selection.
  • GZIP and DEFLATE compression plus better client-side caching is now supported by the file-based retrieval of scripts and style sheets. (You have setup the <add key="DES_GetFilesVirtualPath" /> in the web.config file. If you are using the HttpHandler which is the default, these features already exist.)
  • Your own style sheets can now be compressed and merged with DES's style sheets. See the topic "Support for your own style sheets" in the "Using Style Sheets" section of the "General Features Guide".
  • Any style sheet file that uses DES's compression and merge supports URL tokens "~/" and "{APPEARANCE}" within the url() token of the background and background-image styles.
  • Google Chrome browser fails to handle DropDownList.AutoPostBack=true when that DropDownList is attached to either a native or DES validator. Now you can attach a NativeControlExtender to the DropDownList and it will setup AutoPostBack in a way that works with Chrome, regardless of whether you want to validate prior to postback.
  • The ValueWhenBlank feature on textboxes now supports the Reset button. It establishes the correct text and style sheet depending on how Reset changed the textbox.
  • The TextCounter control now changes the style of the textbox when the length exceeds or drops below the maximum. It requires the Validator's ChangeStyleOnControlsWithErrors property is set to true. (Its set on the PageManager or PeterBlum.DES.Globals.Page object.) It will also hide the TextLengthValidator if its showing as the length is reduced.
  • Improved detection of javascript by running the test code very early. That prevents most javascript errors occurring on the initial page loaded from skipping the test code, and thereby making the postback think no scripts are running.
  • Within the Validator's NoErrorFormatter, its Text property now can use the "{IMAGE}" token to place the ImageUrl's image tag inside the Text.
  • AJAXManager now supports preloading the Spinner feature used by numeric and time textboxes.
  • TimeOfDayTextBox and DurationTextBox have a new property: CommandsFireOnChangeFunction. When OnChangeFunctionName is assigned, this determines if edit commands fire your onchange function. It allows for more interactive behavior when OnChangeFunctionName is used.
  • IE would cache scripts and style sheets separately for each folder identified in a URL. It now caches them once per site. (Associated with the DESGetFiles HttpHandler.)
  • There were cases where garbage collection could occur earlier and reduce the memory demand on the server that are now addressed.
Enhancements to DES Dynamic Data (Prerelease)
  • PatternTemplates introduced. PatternTemplates are perhaps the most important tool to creating web forms. They are User Controls that contain a block of HTML and various controls – including DynamicControls – that describe a pattern. Your ListView and FormView controls require much less setup because instead of writing the HTML and controls of a pattern, you include a PatternTemplate by specifying its name in a DynamicPattern control.
  • DynamicListView and DynamicFormView controls introduced. They subclass ListView and FormView to provide the ease of setup found in GridView and DetailsView. They let you fully control the HTML output by using PatternTemplates. As a result, the PageTemplate files are now using them instead of GridView and DetailsView. Now your PageTemplates can have their HTML customized through the PatternTemplates instead of creating a new PageTemplate file.
  • DynamicColumnTitle control introduced. Used in a columnar style interface to give column titles a sorting user interface.
  • DynamicControlPanel control introduced. This control expands upon the DataPager control from ASP.NET 3.5 to offer far more tools that manipulate the contents of your databound page. There are many types of pagers, sorting options, page size options, and editing buttons.
  • DynamicButtons control introduced. Generates the standard buttons used on databound controls like New, Edit, Save, and Cancel. Very flexible. You can set it up using properties or Templates.
  • DES.ScaffoldColumnAttribute introduced. It subclasses the native ScaffoldColumnAttribute, adding properties that allow ordering of the column, by column number, relative, and after a specified column name.
  • When a CheckBox or RadioButton control is disabled by the FieldStateController, if its parent HTML tag is a <td> without an id= attribute, everything contained in that table cell would be disabled. (A workaround is to assign an id= to the table cell tag.)
  • The Calendar control sometimes had its week rows overlap the right border in FireFox 3 and IE 7.
  • The MultiSelectionCalendar did not use the mouse over effect on day cells that also had the range hiliting effect.
  • These two client-side functions for DateTextBox did not work: DES_DTBSetMinDate() and DES_DTBSetMaxDate().
  • When a TimePicker has the time "0:00" (12 midnight), that value would be treated as "no selection" instead of the actual time. Affected PopupTimePicker, TimeOfDayTextBox with TimePicker and DurationTextBox with TimePicker.
  • When a popup was on top of an element whose style is position:fixed and the main window was scrolled, the popup was incorrectly positioned.
  • The MultiCondition and MultiConditionValidator had differences in how their client-side and server side evaluation functions worked when a child Condition returned "cannot evaluate". The server side code has been changed to match the client-side code.
  • The DecimalMode property on TimeOfDayTextBox and DurationTextBox did not allow entry of a decimal character when it was set to "TimeSeparator".
  • Design mode did not list MultipleRequiredControlsCondition in editors for the Enabler or MultiCondition.
  • The MultipleRequiredControlsValidator sometimes threw a NullReferenceException when populating its RequiredControlsToEvaluate property in the ASP.NET Declarative Syntax.
  • A SpecialDates style sheet on a Calendar's Day cell did not allow the style sheet for Today's Date to be applied. Today's date style sheet should have been merged.
  • When using the SlowDownManager of the Input Security module, an InvalidCastException sometimes appeared from the CheckForwarded_For_IP() method.
  • Validation ErrorMessage and SummaryErrorMessage properties that contain a single \ character would display two \ characters.
  • The MultipleRequiredControlsValidator reported the page is invalid on the server side when all controls it evaluates are Visible=false (such as hidden in a page of a Wizard that is not visible).
  • The DataTypeCheckValidator should support the ReportErrorsAfter property when the DataType="DateTime".
  • The LastSelectedDate property on MultiSelectionCalendar generated a stack overflow exception.
  • When MultiSelectionCalendar is in Range Mode, the hiliting and associated date range appearing in the Message Center would include or exclude one too many dates. Any click to apply that selection would still have the correct results.
  • When javascript is disabled and an illegally formatted number is entered into Integer, Decimal, Currency, or PercentTextBox, the DataTypeCheckValidator does not report an error, yet an attempt to get the number through any "Value" property on these textboxes threw a FormatException.
  • DES's HtmlButton and HtmlInputButton controls threw a TypeCast exception on postback from their OnServerClick event handler.
  • The "Now" command on the TimeOfDayTextBox set the attached DateTextBox one day ahead depending on the current time and timezone.
  • When the date format of YYYY-MM-DD is used on a RangeValidator's Minimum and Maximum, or on the CompareToValueValidator, or in the DateTextBox, certain time zones converted the string entered to the previous day.
  • When PeterBlum.DES.Globals.Page.MoreCultureInfo.AdditionalDateSeparators has two or more characters, client-side code failed to accept any of those characters in the DateTextBox. It would report validation errors instead of converting the separators to their default value. It worked correctly on postback.
  • Infragistics WARP technology now better supported by the AJAXManager. Scripts are more reliably loaded avoiding javascript errors.

9/20/2008 Peter's Data Entry Suite 4.0.4 Update
  • Validation support for Infragistics WebTextBox control
  • New property on MonthYearPicker: ReverseYearOrder. Used in Format=FewYears. It shows the latest year first and the earliest year last.
  • Support for production servers that impose the FIPS security rule where you see this exception: "Rijndael implementation is not part of the Windows Platform FIPS validated cryptographic algorithms". You will also need a new license file that is encoded differently. To get it, go to http://www.peterblum.com/getorder.aspx. Enter your email address and serial number. It will expose a checkbox "I am using either Peter's Data Entry Suite or one of its modules, and I have v4.0.4 or higher." Mark that to have FIPS compliant license files delivered. Replace current files with the new ones.
Enhancements to DES Dynamic Data (Prerelease)
  • New FieldGenerator class to let you control how automatic scaffolding works through the new IFieldGeneratorGuidance interface applied to your master page. There are extensive ways to customize the DynamicField list generated by automatic scaffolding, often eliminating the need to create a duplicate PageTempate in the CustomTemplates folder.
  • New FieldTemplates: DbImage (for binary columns containing images), Url (for strings that are Urls), UrlAsImage (for Urls pointing to images), DateAjaxCalendar_Edit (uses the Ajax Control Toolkit's CalendarExtendr), IntegerSlider_Edit (uses the Ajax Control Toolkit's SliderExtender), and three ways to display booleans (with checkbox, image, and label).
  • When the ToolTip for a DES button has a linefeed (\r\n) or multiple single quotes, a javascript error occurred.
  • Infragistics WebEditor controls that are added after an AJAX update did not get their "onchange" validation effects. They did correctly validate on the client-side when the user attempted to submit.
  • When using AJAX on a Validator whose DataType=Currency and it evaluates a native TextBox, if you don't have a license covering Peter's TextBoxes, it gave a javascript error.
  • XHTML validation error on the querystring parameters of the <script src='DESGetFiles.aspx' /> tag has been fixed.
  • When using the CalculationController with its RoundMode property set to Round5, some calculations caused values that get incorrectly rounded down when they should have rounded up.
  • When using AJAX with "Dummy" Calendar or MultiSelectionCalendar and you are using its ExpandedDateFormatter feature, a javascript error occurred as the page opened.
  • A javascript error occurred when using a calendar with the ExpandedDateFormatter in the following situation: the ExpandedDateFormatter is visible (popped up) and the user attempts to open anything else that pops up, such as the MonthYearPicker or ContextMenu.
  • When using a numeric TextBox with its ValueWhenBlank property set, if validation has the following settings, the user may be constantly confronted by alerts: PageManager.ShowAlertOnChange=true PageManager.FocusOnChange=true RequiredTextValidator on the textbox.
  • In FireFox, a textarea tag treats carriage returns differently than other browsers. The length of a carriage return is 1 character in FF and 2 in others. This affects TextCounter and TextLengthValidator (on the client-side) as they evaluate differently for the browsers. The code has been adjusted to make FF count each carriage return as 2.

7/7/2008 Peter's Data Entry Suite 4.0.3 Update
  • Prerelease of "DES Dynamic Data" is available in the Dynamic Data folder. This will become v4.1 when its finished (it will be a free update for v4 users).
    It delivers support for ASP.NET Dynamic Data and numerous enhancements to that system. Please give it a try and provide feedback so this software is correctly implemented.
  • Scripts and style sheets are now delivered using GZIP or DEFLATE compression on browsers that support it. This requires the DESGetFiles.aspx HttpHandler to be active.Most browsers support this. However, due to bugs in IE6's implementation, this feature is disabled on that browser.
  • New Property: AutoHintStyle. On all Date and Time textbox controls. Expands your control over the AutoHint feature, letting you pick from various styles, such as tooltip or hint.
  • New Property: AutoHintAppendsToHint. On all Date and Time textbox controls. Expands the AutoHint feature to allow the text assigned to the Hint property to be merged with the AutoHint text.
  • Calendar and MultiSelectionCalendar now can identify what invoked your OnSelectionChangedScript by testing the local variable vApply. If true, the Apply button was clicked. False when the selection was changed.
  • Scripts are now using the preferred standard of //<![CDATA[ as opposed to <!--.
Bug Fixes
  • The HintFormatter.HiddenOnError property should also take into account if the validator's NoErrorFormatter is displayed. It should not show the hint in that case as the goal of HiddenOnError is to avoid having both the validator's info and the hint on the screen at the same time.
  • When Validator.NoErrorFormatter.Mode is set to "Correct", it did not display the NoErrorFormatter if the first action the user took was to enter correct information. It appearred only if they edited the field a second time.
  • When a validator uses OverrideClientSideEvaluation=Callback and ReportErrorsAfter uses any form of "AllEdits", a javascript error occurred after the callback.
  • The resources files supplied for the String Lookup System were lacking "DESMisc.resx"
  • When using AJAX to preload a ValidationSummary with the PageManager.PreloadForAJAX-ValidationSummary property, or calling AJAXManager.PreRegisterForAJAX(ValidationSummary), a Javascript error still occured after the callback.
  • When using AJAX to preload a TextBox and the textbox uses the ValueWhenBlank properties, a javascript error referring to "DES_VWBInit" occured on the callback.
  • When using PageManager or DESPage.ChangeStyleOnControlsWithError and you make a validator invalid on the server side, the control with the error could get stuck showing the error style sheet even after it was fixed.
  • When using PageManager or DESPage.ChangeStyleOnControlsWithError, a RadioButtonList or CheckBoxList with RepeatLayout=Table will incorrectly show the error style sheet after the error gets corrected (no postback or callback involved).
  • When in an AJAX Callback, if a DateTextBox sets a property on either its PopupCalendar or Calendar child properties, a Typecast exception was thrown.
  • When in an AJAX Callback, if a control created during the callback needs different CultureInfo features on the client-side, they were not supplied. The control would not offer the correct culture info settings. In some cases, the control will generate a Javascript error.
  • The FieldStateController ignored changing its Enabled property during a postback if server side validation already occurred.
  • Script and style sheet files delivered by the DESGetFiles.aspx HttpHandler were not caching on the browser.
  • Third party controls that declare an <InitScript> tag in the <ThirdPartyControls> section of the custom.des.config file would fail to run that function if they are first loaded after an AJAX callback.
  • When using an AJAX Callback, server side validators that report an error did not reflect that error on the ValidationSummary or the alert shown when using PageManager.ShowAlertOnSubmit.
  • There was a licensing error demanding Peter's Profession Validation when you don't have that license and use any DES TextBox's AutoPostBack property.
  • When a hint's text included a carriage return character, a javascript error could occur.
  • PageManager control was missing a property to set the PreLoadForAJAX-CombinedErrorMessages property.
  • When using a CustomValidator without its ControlToEvaluate property assigned, a javascript error could occur during an AJAX callback.
  • When using a Panel with any DES TextBox controls and that Panel is Visible=false initially, if you set it to Visible=true during an AJAX callback, the DES textbox controls will not display although they should.
  • When using design mode in Visual Studio 2008, the Cancel button on the property editor for a Conditions property will crash VS2008.

5/12/2008 Peter's Data Entry Suite 4.0.2 Update
  • BREAKING CHANGE: The TextCounter now offers the NoLimitMessage property. It is used instead of the NormalMessage property when there is no maximum specified. The default text of the NormalMessage property has been changed to "{COUNT} of {MAXIMUM} characters". If you are using the default text on NormalMessage and you want the original text, assign it to "{COUNT} {COUNT:character:characters}".
  • New Validator (available with a Peter's More Validators license): RequiredSelectionValidator. When a selection is required on a control that is not textual or list. Supports ListView, DataIndex, DES's Calendar, MultiSelectionCalendar, MonthYearPicker, and TimePicker.
  • In ASP.NET 2 and higher, an HttpHandler is now used to deliver scripts and style sheets to the browser. It replaces the GetFiles.aspx file (although that remains as a backup solution.) The Web Application Updater will add an entry in the <httpHandlers> section of your web.config file. When using IIS 7, the <system.webServer> section will need an entry in its <handlers> section. It will be added by the Web Application Updater if the system.webServer section is present. You will need to add it manually if that section does not exist.
  • MultipleRequiredControlsValidator now supports CheckBoxes and RadioButtons.
  • New property: DefaultErrorFormatterSkinID on PageManager and PeterBlum.DES.Globals.Page. Validators whose ErrorFormatterSkinID property is set to "{DEFAULT}" will first look for a value in the DefaultErrorFormatterSkinID property. If assigned, it is used as the SkinID. This feature also changes the default value for a validator's ErrorFormatterSkinID from "" to "{DEFAULT}". It will have no impact until you explicitly change the DefaultErrorFormatterSkinID.
  • The ErrorFormatterSkinID and DefaultErrorFormatterSkinID properties now let you override properties that it declares by using a syntax like ErrorFormatterSkinID="MyTextFormatter {Display='dynamic'}".
    They also let you enter the standard names of the errorformatters, like "text" and "texterrorformatter" to select their default value without having a saved errorformatter template in the custom.des.config file.
  • The PageManager control now supports the following properties: ControlErrorCssClass, ListErrorCssClass, CheckBoxErrorCssClass, TextHiliteFieldsCssClass, and NonTextHiliteFieldsCssClass. (They were always available programmatically on the PeterBlum.DES.Globals.Page object.)
  • New event on PeterBlum.DES.Globals.Page: Use the BeforeValidation event handler to run code first, each time the DESPage.Validate() method is called.
  • The PeterBlum.DES.Globals.Page.PostPageValidationFunctionName property is used to call your own scripts immediately after page-level validation occurs, whether it was valid or not.
  • New property on FieldStateControllers: UpdateWhileEditing. Determines if the FieldStateController is triggered as the user types into a textbox that it uses to evaluate its condition. By default, it does not and only triggers when focus leaves the textbox. Set this to true to evaluate the FieldStateController with each keystroke.
  • New property on SpecialDates control: DayOfWeekConflictRule. Determines what happens when both a SpecialDayOfWeek and any other SpecialDate item share the same date. One of the two must be selected based on this rule.
  • The Enabled property of the Calendar control now will prevent changing the selected date when it is disabled. The FieldStateController will visually update the Calendar as it toggles the Enabled property.
  • On Date and Time textboxes, you can turn off the AutoHint feature but still get the tooltip setup with the text of the auto hint. Call the control's BuildDescriptionForHint() method in Page_Load. Make sure AutoHint is false.
  • New property on FilteredTextBox: UseKeyboardFiltering. Determines if the client-side filters out characters that are not supported by the datatype. This is usually left true unless you need to switch the control between unfiltered and filtered.
  • Web Application Updater automatically adds the <location path="DES"> tag to the web.config file. This is needed by sites using Forms Authentication.
  • Design mode speed in VS2005 and 2008 has been improved when there are a large number of DES controls on the design surface.
  • Design mode support for the Visual Studio/VWD command: "ASP.NET Non-Visual Controls". When unchecked, the following controls will be hidden from design mode: PageManager, NativeControlExtender, SpecialDates, all FieldStateControllers, and CalculationController. FYI: The command is under the View menu. If not found, you can add it using the Customize command.
  • Due to changes in RadControls for ASP.NET AJAX Q1 2008, the Telerik_Web_UI.config file has been updated. Copy the one from the [DES product folder]\Third Party Support\Telerik RadControls into the DES folder of your web application. This file will still work with Q3 2007 too.
  • Safari 3.1 did not handle clicks on popups correctly when the popup was on a scrolled web page.
  • The MonthYearTextBox would always assign this year to the date instead of the requested date when the ShortDatePattern was "d/MM/yyyy" or "dd/MM/yyyy".
  • The MultiSelectionCalendar's Select Month button did nothing when on December of any year.
  • Some cultures displayed "NaN" as the week row number on the Calendar and MultiSelectionCalendar.
  • When a CombinedErrorMessages control uses the PopupErrorFormatter, there was a javascript error if the page posted back and redrew with the control showing an error.
  • Only in v4.0.1: When AJAX is setup, you may get a NullReferenceException where the callstack includes "ControlInAJAXUpdate".
  • This error shown by ASP.NET AJAX in an alert box no longer happens: "The script tag registered for type 'ASP.page_aspx' and key 'DES_ClientScripts' does not contain any valid script tags."
  • When using the CombinedErrorMessages control within AJAX, a callback sometimes lost its ability to update validators after an edit. It still worked on a client-side submit.
  • The TimeOfDayTextBox and DurationTextBox did not handle their RoundUpMinutes property correctly.
  • When using the AJAXManager's PreLoadForAJAX features, it now loads script files and style sheets more intelligently in several cases.
  • The ValidationSummary did not appear when in a MultiView or Wizard, after the first view.
  • PopupTimePicker would always be visible so long as its BodyHeight property was assigned.
  • When showing the toggle button on a Date or Time control and you are using a FieldStateController to change the control's enabled state, postbacks sometimes resulted in the toggle button disappearing.
  • The ChangeMonitor failed to apply changes made to the current state on the server side after an AJAX callback.
  • On postback, an Integer segment within the MultiSegmentDataEntry control may report a validation error when it was correct.
  • When converting from VAM to DES, the Web Application Updater would convert these style sheet class names incorrectly: VAMMultiSegTextBox and VAMMultiSegContainer. They should be DESTBMultiSegTextBox and DESTBMultiSegContainer.
  • When using the app_GlobalResources folder but you need the String Lookup System to access a database, strings were not returned from the database.
  • When using the Expanded Properties Editor on the TimeOfDayTextBox, the TimePicker was not offered in the icons along the top.

2/23/2008 Peter's Data Entry Suite 4.0.1 Update
  • Validation support for these Telerik RadControls "Prometheus" web controls: RadEditor, RadComboBox, RadGrid, RadMenu, RadTextBox, RadNumericTextBox, RadMaskedBox, RadDateInput, and RadDatePicker.
    Run the Web Application Updater's "Install an update" option. It will eventually list third party controls. Make sure the first item is checked.
    See the Using Third Party Controls guide for details.
  • Web Application Updater: When you elect to manually install assemblies (for the GAC), it now adds the <assemblyBinding> and <add tagPrefix> tags.
  • New property: AcceptPeriodAsDecimalSeparator. On Decimal, Currency, and Percent TextBoxes. Lets cultures whose decimal separator is not a period to accept a period character in addition to their decimal separator. Great for numeric keypad entry of numbers.
  • URL properties that support images with pressed and mouseover versions now accept up to 3 URLs in this pipe (|) delimited format: normal|pressed|mouseover. When used, this overrides DES's sniffing out image files for pressed and mouseover versions. It also lets WebResource users support pressed and mouseover images.
  • EmailAddressValidator SmartTag now has properties for MultipleAddressesAllowed, DelimiterCharacter, and DelimiterAllowsSpace.
  • New property: ShiftKeyForRange on MultiSelectionCalendar. By default, users can hold down the shift key to extend a range. When you set ShiftKeyForRange to false, the shift key cannot create a range. A click with the shift key pressed will work the same as when it is not pressed.
  • Some new debugging tools let you explore AJAX, validation, the page, and more settings very quickly.
    See "Exploring the Current Settings" in the General Settings Guide.
  • ImageButton supports images for pressed and mouseover effects with the MultipleImages property and the ImageUrl property's support of the pipe delimited list of URLs.
  • Buttons support an alternative style sheet class when disabled with the WhenDisabledCssClass property. ImageButton also supports an alternative image when disabled with the WhenDisabledImageUrl property.
  • TextBox.ValueWhenBlankCssClass property now supports the "+" notation allowing its style to merge with the existing CssClass property instead of override it. This preserves styles from CssClass and only overrides the styles that are introduced in ValueWhenBlankCssClass.
Bugs fixed
  • When the CombinedErrorMessages control had its ErrorFormatter set to Popup, the popup did not appear when focus was on the field with the error. (It still appeared when the mouse was over the error icon.)
  • DateTextBox gave a javascript error when attempting to open the calendar if the ASP.NET declarative syntax had any properties in the <Calendar> section.
  • When using the Popup Hint feature and your hint contained a double quote, it would generate a javascript error. When the hint contained a \ character, it would not appear in the PopupView.
  • On production servers, this exception occurred occassionally: System.InvalidOperationException, " The instance is a duplicate of one already in the list." Stack trace shows: "at PeterBlum.DES.CachedCombinedFiles.Add(Object pValue)"
  • In cultures that use ASCII 160 to represent the thousands separator, that character was not accepted in the DecimalTextBox, CurrencyTextBox, and PercentTextBox. Includes Finland and Sweden.
  • For numeric textboxes. When using the MinValueToNative, MinValueToInteger, MinValueToDouble, or the max versions of the same, if you included the currency symbol, percent symbol, or thousands separator on the textbox, you would get this exception: "control.MinValue is not an integer or decimal value."
  • When a DateTextBox is initially disabled by a FieldStateController, upon getting enabled by the FSC, an attempt to popup the calendar failed with a javascript error.
  • DateTextBox and validators using DataType=Date would fail in cultures using upper ASCII and unicode characters. It had checked for A-Za-z as all letters, missing characters with umlats and for other languages.
  • Bulgarian culture adds extra text into its ShortDatePattern that prevented DateTextBox and validators using DataType=Date from working.
  • TimeOfDayTextBox and DurationTextBox incorrectly handled cultures where the TimeSeparator character is "."
  • When using ValueWhenBlankCssClass on a textbox with a RequiredTextField that was using PeterBlum.DES.Globals.Page.ControlErrorCssClass to change the textbox when it is in an error, ControlErrorCssClass should always override ValueWhenBlankCssClass. It did not consistently.

1/16/2008 Peter's Data Entry Suite 4.0.0
Initial release, January 2008.