This is a migrated thread and some comments may be shown as answers.

Firefox-custom validation disables date column

1 Answer 58 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Elliott
Top achievements
Rank 2
Elliott asked on 05 Mar 2012, 03:12 PM
I have a custom validator attached to a date column in edit on an order entry system to insure that the user doesn't change the date to one already on another order item for that product
if the error is triggered in Firefox (but not in IE, Opera, Safari or Chrome) the date stops popping up for any other item on the page

the column from the grid
<telerik:GridDateTimeColumn UniqueName="ShipDate" DataField="ShipDate" PickerType="DatePicker" HeaderText="Ship Date" DataFormatString="{0:d}" DataType="System.DateTime" >
    <HeaderStyle Width="60px" />                    
</telerik:GridDateTimeColumn>
some Javascript
    var j = 0;
    function ship_date_selected(sender, eventArgs) {
        var date = eventArgs._newValue;
        // prevent loop
//        var chk = eventArgs._oldValue;
        if (j > 0) {
            return;
        }
        var oldDate = eventArgs.get_oldDate();
        var thisItem = document.getElementById('txtItemID');
        // date already for Item
        var theGrid = $find("<%=rgEditOrder.ClientID %>").get_masterTableView();
        var j = $find("<%=rgEditOrder.ClientID %>")._editIndexes[0];
        var editRow = theGrid.get_dataItems()[j];
        var thisStore = theGrid.getCellByColumnUniqueName(editRow, "StoreNumber").innerHTML;
        for (var i = 0; i < theGrid.get_dataItems().length; i++) {
            var row = theGrid.get_dataItems()[i];
            if (!row.get_isInEditMode()) {
                var ItemID = theGrid.getCellByColumnUniqueName(row, "ItemID").innerHTML;
                var storeNumber = theGrid.getCellByColumnUniqueName(row, "StoreNumber").innerHTML;
//              alert(ItemID);
                if (parseInt(ItemID) == parseInt(thisItem.value)) {
                    if (parseInt(storeNumber) == parseInt(thisStore)) {
                        var ShipDate = theGrid.getCellByColumnUniqueName(row, "ShipDate").innerHTML;
//                      alert(ShipDate);
                        if (Date.parse(date) == Date.parse(ShipDate)) {
                            alert('Date already used ' + ShipDate);
                            sender.set_selectedDate(oldDate);
                            i = 9999;
                            return false;
                        }
                    }
                }
            }
        }
         
        var strSD = format_dates(date);
        if (!delivery_ok(strSD)) {
            j++;
            sender.set_selectedDate(oldDate);
            alert('Invalid delivery date');
            return false;
            }
    }
    // validate that date supplied falls in one of three ship windows       
    function delivery_ok(strSD) {
        var endDate1 = document.getElementById('rtbEnd1');
        var endDate2 = document.getElementById('rtbEnd2');
        var endDate3 = document.getElementById('rtbEnd3');
        var startDate1 = document.getElementById('rtbStart1');
        var startDate2 = document.getElementById('rtbStart2');
        var startDate3 = document.getElementById('rtbStart3');
 
        // add century(20) to ship dates-mm/dd/yy->mm/dd/yyyy           
        var vDate1 = format_dates(startDate1.value);
        var vDate2 = format_dates(startDate2.value);
        var vDate3 = format_dates(startDate3.value);
        var vEnd1 = format_dates(endDate1.value);
        var vEnd2 = format_dates(endDate2.value);
        var vEnd3 = format_dates(endDate3.value);
 
        if (vDate1 != '') {
            if (Date.parse(strSD) >= Date.parse(vDate1) && Date.parse(strSD) <= Date.parse(vEnd1)) {
                return true;
            }
        }
        if (vDate2 != '') {
            if (Date.parse(strSD) >= Date.parse(vDate2) && Date.parse(strSD) <= Date.parse(vEnd2)) {
                return true;
            }
        }
        if (vDate3 != '') {
            if (Date.parse(strSD) >= Date.parse(vDate3) && Date.parse(strSD) <= Date.parse(vEnd3)) {
                return true;
            }
        }
        return false;
    }
    // append century(20) to date-mm/dd/yy->mm/dd/yyyy
    // validate that date is in correct format-if error found
    // return blank string       
    function format_dates(strDate) {
        var i = 0;
        var arrDate;
        // this routine makes no sense           
        for (i = 0; i < 3; i++) {
            if (strDate.indexOf("/") != -1) {
                arrDate = strDate.split("/");
                if (arrDate.length != 3) {
                    return "";
                }
            }
            else {
                return "";
            }
        }
 
        // prefix the year with century-hardcoded 20                
        var ye = "20" + arrDate[2].substring(arrDate[2].length - 2);
        var month = Number(arrDate[0]);
        var day = Number(arrDate[1])
        // check month and day-month between 1 and 12,day between 1 and 31
        // except April,June,September and November-and February
        if (month < 1 || month > 12) { return ""; }
        if (day < 1 || day > 31) { return ""; }
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
            return "";
        }
        // February-check against leap year
        if (month == 2) {
            var isleap = (ye % 4 == 0 && (ye % 100 != 0 || ye % 400 == 0));
            if (day > 29 || (day == 29 && !isleap)) { return ""; }
        }
 
        // no date errors encountered-rebuild date and return
        var strD = Number(arrDate[0]) + "/" + Number(arrDate[1]) + "/" + ye;
        return strD;
    }

decorate the edit item
  protected void rgEditOrder_ItemCreated(object source, GridItemEventArgs e)
  {
      GridEditableItem geItem;
//    GridDataItem gdItem;
      RadDatePicker rdpShipDate;
      GridDateTimeColumnEditor ceShipDate;
      TableCell tcShipDate;
      CustomValidator cvShipDate;
      RadNumericTextBox rntbQty;
//    int MinQty;
 
      if (e.Item.IsInEditMode)
      { }
      else
          return;
 
      if (e.Item is GridEditableItem)
      { }
      else
          return;
 
      geItem = (GridEditableItem)e.Item;
      rdpShipDate = (geItem["ShipDate"].Controls[0] as RadDatePicker);
      rdpShipDate.ClientEvents.OnDateSelected = "ship_date_selected";
      rdpShipDate.AutoPostBack = true;    
      rdpShipDate.SelectedDateChanged += rdpShipDate_SelectedDateChanged;
      txtShipDate.Value = rdpShipDate.ClientID;
 
      ceShipDate = geItem.EditManager.GetColumnEditor("ShipDate") as GridDateTimeColumnEditor;
      tcShipDate = (TableCell)ceShipDate.PickerControl.Parent;
      cvShipDate = new CustomValidator();
      cvShipDate.ID = "cvShipDate";
      cvShipDate.ControlToValidate = rdpShipDate.ID;
      cvShipDate.ServerValidate += ShipDate_OnServerValidate;
      cvShipDate.Text = "*";
      cvShipDate.ErrorMessage = "Item already ordered on this ship date";
      tcShipDate.Controls.Add(cvShipDate);
 
  }

am I going about it the wrong way - or is there - gasp! - a bug?
I'm using the Q3 2011 version

1 Answer, 1 is accepted

Sort by
0
Elliott
Top achievements
Rank 2
answered on 05 Mar 2012, 05:16 PM
I updated the site with a completely unrelated change - and the problem went away
go figure
it still is necessary to open another item before attempting to update the ship date to something unique
Tags
Grid
Asked by
Elliott
Top achievements
Rank 2
Answers by
Elliott
Top achievements
Rank 2
Share this question
or