I need to apply custom validation on a GridDateTimeColumn
is there a way to add a custom validator on the Edit Command?
or
if I template the column, what is the equivalent (Label and RADDatePicker?) in ItemTemplate controls and EditItemTemplate controls
                                is there a way to add a custom validator on the Edit Command?
or
if I template the column, what is the equivalent (Label and RADDatePicker?) in ItemTemplate controls and EditItemTemplate controls
4 Answers, 1 is accepted
0
                                Hi Marianne,
Yes, there is a way to add custom validation, you could find more information about it at the last section of our online documentation:
http://www.telerik.com/help/aspnet-ajax/grid-custom-editors.html
The other approach you have mentioned is applicable too, more information you could find in our Getting Started section, sub-section Add Controls to Column Templates of RadGrid online documentation which resides on the following address:
http://www.telerik.com/help/aspnet-ajax/grid-add-controls-to-templates.html
Kind regards,
Andrey
the Telerik team
                                        Yes, there is a way to add custom validation, you could find more information about it at the last section of our online documentation:
http://www.telerik.com/help/aspnet-ajax/grid-custom-editors.html
The other approach you have mentioned is applicable too, more information you could find in our Getting Started section, sub-section Add Controls to Column Templates of RadGrid online documentation which resides on the following address:
http://www.telerik.com/help/aspnet-ajax/grid-add-controls-to-templates.html
Kind regards,
Andrey
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!
0
                                
                                                    Elliott
                                                    
                                            
    Top achievements
    
            
                
                Rank 2
            
    
                                                
                                                answered on 20 Jul 2011, 02:44 PM
                                            
                                        thanks Andrey
I ended up adding a custom validator but couldn't get it to fire - there is a javascript routine that needed to run before any custom validator
the grid
I fire the validation on the update, which is fine - it's on the server anyway
                                        I ended up adding a custom validator but couldn't get it to fire - there is a javascript routine that needed to run before any custom validator
    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');         var thisStore = document.getElementById('txtStoreHidden');                   // date already for Item         var theGrid = $find("<%=rgEditOrder.ClientID %>").get_masterTableView();         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.value)) {                         var ShipDate = theGrid.getCellByColumnUniqueName(row, "ShipDate").innerHTML;                         if (Date.parse(date) == Date.parse(ShipDate)) {                             alert('Date already used ' + ShipDate);                             sender.set_selectedDate(oldDate);                             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;     }        <telerik:RadGrid ID="rgEditOrder" OnNeedDataSource="rgEditOrder_NeedDataSource"             OnItemCommand="rgEditOrder_ItemCommand" OnItemCreated="rgEditOrder_ItemCreated"             ShowFooter="True" runat="server" Skin="Sunset">         <GroupingSettings CaseSensitive="false" />         <MasterTableView DataKeyNames="OrderSeq" AutoGenerateColumns="false" AllowSorting="true" AllowPaging="true" AllowFilteringByColumn="False" EditMode="InPlace" >         <Columns>             <telerik:GridBoundColumn UniqueName="StoreNumber" DataField="StoreNumber" HeaderText="Store #" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="40px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="BoothNumber" DataField="BoothNumber" HeaderText="Booth #" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="40px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="ItemID" DataField="ItemID" HeaderText="Item" DataType="System.Double" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="40px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="ItemDescription" DataField="ItemDescription" HeaderText="Description" ReadOnly="True">                 <HeaderStyle Width="100px" />             </telerik:GridBoundColumn>             <telerik:GridDateTimeColumn UniqueName="ShipDate" DataField="ShipDate" PickerType="DatePicker" HeaderText="Ship Date" DataFormatString="{0:d}" DataType="System.DateTime" >                 <HeaderStyle Width="60px" />                        </telerik:GridDateTimeColumn>             <telerik:GridTemplateColumn UniqueName="Cases" HeaderText="" >                 <EditItemTemplate>                     <telerik:RadNumericTextBox ID="rntbQty" Text='<%# Eval("Qty") %>' MinValue='<%# Bind("Qty") %>' OnTextChanged="rntbQty_TextChanged" AutoPostBack="True" Width="30px" runat="server">                         <NumberFormat DecimalDigits="0" />                     </telerik:RadNumericTextBox>                 </EditItemTemplate>                 <HeaderStyle Width="30px" />                         </telerik:GridTemplateColumn>             <telerik:GridBoundColumn UniqueName="Qty" DataField="Qty" HeaderText="Cases" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="Sum" ReadOnly="True" >                 <HeaderStyle Width="30px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="NetCost" DataField="NetCost" HeaderText="Net Cost" DataFormatString="{0:C2}" DataType="System.Double" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="50px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="ItemTotal" DataField="ItemTotal" HeaderText="Item Total" DataFormatString="{0:C2}" DataType="System.Double" Aggregate="Sum" ReadOnly="True">                 <HeaderStyle Width="50px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="PageNumber" DataField="PageNumber" HeaderText="Page" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="40px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="VendorNumber" DataField="VendorNumber" HeaderText="Vendor" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="40px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="DepartmentNumber" DataField="DepartmentNumber" HeaderText="Depart" DataFormatString="{0:##}" DataType="System.Int32" Aggregate="None" ReadOnly="True">                 <HeaderStyle Width="30px" />             </telerik:GridBoundColumn>             <telerik:GridBoundColumn UniqueName="OrderSeq" DataField="OrderSeq" DataType="System.Int64" Visible="false">             </telerik:GridBoundColumn>             <telerik:GridDateTimeColumn UniqueName="StartDate1" DataField="StartDate1" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>                <telerik:GridDateTimeColumn UniqueName="EndDate1" DataField="EndDate1" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>             <telerik:GridDateTimeColumn UniqueName="StartDate2" DataField="StartDate2" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>                <telerik:GridDateTimeColumn UniqueName="EndDate2" DataField="EndDate2" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>             <telerik:GridDateTimeColumn UniqueName="StartDate3" DataField="StartDate3" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>                <telerik:GridDateTimeColumn UniqueName="EndDate3" DataField="EndDate3" PickerType="DatePicker" DataType="System.DateTime" Visible="false">             </telerik:GridDateTimeColumn>         </Columns>         </MasterTableView>         <ClientSettings>             <ClientEvents OnRowDblClick="RowDblClick" />             <ClientEvents OnRowClick="RowClick" /> <%--        <ClientEvents OnGridCreated="GetGridObject" />             <ClientEvents OnDataSourceResolved="CalcTotals" />--%>         </ClientSettings>         </telerik:RadGrid>I fire the validation on the update, which is fine - it's on the server anyway
protected void rgEditOrder_ItemCreated(object source, GridItemEventArgs e) {     GridEditableItem geItem;     RadDatePicker rdpShipDate;     GridDateTimeColumnEditor ceShipDate;     TableCell tcShipDate;     CustomValidator cvShipDate;     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); }protected void rdpShipDate_SelectedDateChanged(object sender, EventArgs e) {     RadDatePicker rdpShipDate;     GridEditableItem geItem;     DateTime OldShipDate,NewShipDate;     double fStore,dItemID;     int iBooth,iPage,iQty;     string strOldDel,strNewDel;     bool bUpdate=false;     WsOrderSystem wsOrder;     Page.Validate();     if (Page.IsValid) {}     else { return; }     rdpShipDate = (sender as RadDatePicker);     geItem = rdpShipDate.NamingContainer as GridEditableItem;     NewShipDate = Convert.ToDateTime(rdpShipDate.SelectedDate);     OldShipDate = Convert.ToDateTime((e as Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs).OldDate);     fStore = Convert.ToDouble(ExtractValue(geItem,"StoreNumber"));     iBooth = Convert.ToInt32(ExtractValue(geItem,"BoothNumber"));     dItemID = Convert.ToDouble(ExtractValue(geItem,"ItemID"));     iPage = Convert.ToInt32(ExtractValue(geItem,"PageNumber"));     iQty = Convert.ToInt32(ExtractValue(geItem, "Qty"));     strOldDel = OldShipDate.ToShortDateString();     strNewDel = NewShipDate.ToShortDateString();     wsOrder = new WsOrderSystem();             bUpdate = wsOrder.UpdateOrder(fStore,iBooth,iPage,dItemID,iQty,strOldDel,strNewDel);     rgEditOrder.MasterTableView.IsItemInserted = false; } protected void ShipDate_OnServerValidate(object source, ServerValidateEventArgs args) {     CustomValidator cvShipDate;     RadDatePicker rdpShipDate;     GridEditableItem geItem;     TableCell tcShipDate;     double fStore, dItemID;     int iBooth, iPage, iQty;     string strDel;     WsOrderSystem wsOrder;     DataSet dsOrder;     lblCompleteOrder.Visible = false;     args.IsValid = false;     cvShipDate = (CustomValidator)source;     tcShipDate = (TableCell) cvShipDate.Parent;     geItem = (GridEditableItem) tcShipDate.Parent;     strDel = args.Value;     fStore = Convert.ToDouble(ExtractValue(geItem, "StoreNumber"));     iBooth = Convert.ToInt32(ExtractValue(geItem, "BoothNumber"));     dItemID = Convert.ToDouble(ExtractValue(geItem, "ItemID"));     iPage = Convert.ToInt32(ExtractValue(geItem, "PageNumber"));     wsOrder = new WsOrderSystem();     dsOrder = new DataSet();     dsOrder = wsOrder.GetOneOrderItem(fStore,iBooth,iPage,dItemID,strDel);     if (dsOrder.Tables.Count > 0)     {         if (dsOrder.Tables[0].Rows.Count < 1)             args.IsValid = true;     } }0
                                
                                                    Muhammad
                                                    
                                            
    Top achievements
    
            
                
                Rank 1
            
    
                                                
                                                answered on 09 Aug 2012, 07:46 AM
                                            
                                        i am making a page where i need some validation that StartDate should be less than the EndDate and i m using telerik:GridDateTimeColumn. Please tell me hoe can i compare these two values from telerik:GridDateTimeColumn.
its ergent please.....:-/
                                        its ergent please.....:-/
0
                                Hello,
You could check this online demo application for a sample code of the approach you could use.
Greetings,
Andrey
the Telerik team
                                        You could check this online demo application for a sample code of the approach you could use.
Greetings,
Andrey
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.