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

Validation on GridDateTimeColumn

6 Answers 200 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Paul Taylor
Top achievements
Rank 1
Paul Taylor asked on 13 Dec 2011, 11:03 AM
I am trying to programmatically add a RequiredFieldValidator to a GridDateTimeColumn. However, I get a null reference exception when the grid goes into Edit or Insert mode.

Relevant code is:

                <telerik:GridDateTimeColumn DataField="NoticeDate" HeaderText="Notice Date" UniqueName="NoticeDate"
                    DataFormatString="{0:d}" />

   Private Sub grdNip_ItemCreated(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles grdNip.ItemCreated
        If TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode Then
            Dim item As GridEditableItem = e.Item

            Dim dateEditor As GridDateTimeColumnEditor
            Dim valRequired As RequiredFieldValidator
            Dim cell As TableCell

            dateEditor = item.EditManager.GetColumnEditor("NoticeDate")
            cell = dateEditor.PickerControl.Parent
            dateEditor.PickerControl.ID = "dtNoticeDate"
            valRequired = New RequiredFieldValidator()
            valRequired.ControlToValidate = "dtNoticeDate"
            valRequired.ErrorMessage = "Notice date is required"
            cell.Controls.Add(valRequired)
        End If
    End Sub

Stack trace:

[NullReferenceException: Object reference not set to an instance of an object.]
   Telerik.Web.UI.GridDateTimeColumnEditor.set_Text(String value) +34
   Telerik.Web.UI.GridBoundColumn.OnDataBindColumn(Object sender, EventArgs e) +856
   System.Web.UI.Control.OnDataBinding(EventArgs e) +99
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +92
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   System.Web.UI.Control.DataBindChildren() +211
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
   System.Web.UI.Control.DataBind() +15
   Telerik.Web.UI.GridEditFormItem.SetupItem(Boolean dataBind, Object dataItem, GridColumn[] columns, ControlCollection rows) +227
   Telerik.Web.UI.GridItemBuilder.CreateItems(GridGroupingContext group) +869
   Telerik.Web.UI.GridTableView.CreateItems(IEnumerator enumerator, GridColumn[] columns, ControlCollection controls) +129
   Telerik.Web.UI.GridTableView.CreateControlHierarchy(Boolean useDataSource) +994
   Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +545
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
   Telerik.Web.UI.GridTableView.PerformSelect() +16
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
   Telerik.Web.UI.GridTableView.DataBind() +221
   Telerik.Web.UI.GridTableView.Rebind() +48
   Telerik.Web.UI.GridCommandEventArgs.ExecuteCommand(Object source) +159
   Telerik.Web.UI.RadGrid.OnBubbleEvent(Object source, EventArgs e) +134
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +87
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
   System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

6 Answers, 1 is accepted

Sort by
0
Jayesh Goyani
Top achievements
Rank 2
answered on 13 Dec 2011, 11:53 AM
Hello Paul,


protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridEditableItem && e.Item.IsInEditMode)
        {
            GridEditableItem item = e.Item as GridEditableItem;
  
            GridDateTimeColumnEditor dateEditor = item.EditManager.GetColumnEditor("NoticeDate") as GridDateTimeColumnEditor;
  
            if (dateEditor != null && dateEditor.PickerControl != null)
            {
                TableCell cellstart = dateEditor.PickerControl.Parent as TableCell;
  
  
                RequiredFieldValidator validatorstart = new RequiredFieldValidator();
               validatorstart.ControlToValidate = dateEditor.PickerControl.ID;
               validatorstart.ErrorMessage = "Your Message";
                validatorstart.Display = ValidatorDisplay.Dynamic;
                cellstart.Controls.Add(validatorstart);
            }
         
        }
    }


Thanks,
Jayesh Goyani
0
Paul Taylor
Top achievements
Rank 1
answered on 13 Dec 2011, 12:10 PM
Thanks Jayesh, but apart from the fact that your example is in C# and you have added null tests on the editor and picker objects, I don't see any difference between your code and mine. I have tried adding the same null tests, but I still get the same exception (during the ItemCreated event, both those objects have a value). Any idea why I get an exception? Have you tested your code and do you get an exception?
0
Jayesh Goyani
Top achievements
Rank 2
answered on 13 Dec 2011, 12:27 PM
Hello Paul,

Please check below code snippet.
below code is working perfectly from my side.
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
           onitemcreated="RadGrid1_ItemCreated">
           <MasterTableView >
               <Columns>
                     <telerik:GridDateTimeColumn DataField="NoticeDate" HeaderText="Notice Date" UniqueName="NoticeDate"
                   DataFormatString="{0:d}" />
                   <telerik:GridEditCommandColumn></telerik:GridEditCommandColumn>
               </Columns>
           </MasterTableView>
                  </telerik:RadGrid>
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        dynamic data = new[] {
                new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                 new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                 new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                 new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                 new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                 new { ID1 = 1, CustomerName = 2,NoticeDate=DateTime.Now},
                new { ID1 = 4, CustomerName = 5,NoticeDate=DateTime.Now}
                
            };
        RadGrid1.DataSource = data;
    }
 
 
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridEditableItem && e.Item.IsInEditMode)
        {
            GridEditableItem item = e.Item as GridEditableItem;
 
            GridDateTimeColumnEditor dateEditor = item.EditManager.GetColumnEditor("NoticeDate") as GridDateTimeColumnEditor;
 
            if (dateEditor != null && dateEditor.PickerControl != null)
            {
                TableCell cellstart = dateEditor.PickerControl.Parent as TableCell;
 
 
                RequiredFieldValidator validatorstart = new RequiredFieldValidator();
                validatorstart.ControlToValidate = dateEditor.PickerControl.ID;
                validatorstart.ErrorMessage = "Your Message";
                validatorstart.Display = ValidatorDisplay.Dynamic;
                cellstart.Controls.Add(validatorstart);
            }
 
        }
    }


Note : if you still get the issue then please let me know from which line number you get this error.

Thanks,
Jayesh Goyani
0
Paul Taylor
Top achievements
Rank 1
answered on 13 Dec 2011, 01:02 PM
Hi Jayesh,

After translating your code to VB, I managed to find the source of the error. In my original code, I set the PickerControl ID, following examples I had seen for GridTextBoxColumnEditors.

dateEditor.PickerControl.ID = "dtNoticeDate"

If you change your code to include this line, you will get the same error. I believe this is a bug.

Cheers,
Paul Taylor
0
Jayesh Goyani
Top achievements
Rank 2
answered on 13 Dec 2011, 01:20 PM
Hello Paul,

Are you able to resolved your issue ???

Thanks,
Jayesh Goyani
0
Paul Taylor
Top achievements
Rank 1
answered on 13 Dec 2011, 02:15 PM
Jayesh, yes, thanks. When I remove the line that set the ID of the Picker control, the exception no longer occurs.
Tags
Grid
Asked by
Paul Taylor
Top achievements
Rank 1
Answers by
Jayesh Goyani
Top achievements
Rank 2
Paul Taylor
Top achievements
Rank 1
Share this question
or