Validate in RadDataForm

11 posts, 0 answers
  1. Andreas Decke
    Andreas Decke avatar
    25 posts
    Member since:
    Oct 2007

    Posted 06 Apr 2011 Link to this post

    Hello,

    i work with the last internal Build of DataForm (405), my problem, how can i do
    validate? I use a RadWindow to edit data from a RadGrid.

    DataFormLocation.ValidateItem() is allways false.

    <telerik:RadWindow x:Class="SDLManager.Controls.WindowEditLocation"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"                  
        mc:Ignorable="d"
        d:DesignHeight="420" d:DesignWidth="400" >
     
      <Grid x:Name="LayoutRoot" Background="White" Width="350">
        <telerik:RadDataForm Name="DataFormLocation" EditEnded="DataFormLocation_EditEnded" AutoGenerateFields="True" AutoGeneratingField="DataFormLocation_AutoGeneratingField" Margin="4">
        </telerik:RadDataForm>
      </Grid>
    </telerik:RadWindow>

    using System;
    using System.Windows;
    using SDLManager.Web;
    using Telerik.Windows.Controls;
    using Telerik.Windows.Controls.Data.DataForm;
     
    namespace SDLManager.Controls
    {
      public partial class WindowEditLocation : RadWindow
      {
     
        #region Propeties
     
        public SDLmedia_Location NewLocation { get; set; }
        public bool IsNew { get; set; }
     
        #endregion
     
     
        public WindowEditLocation()
        {
          InitializeComponent();
        }
     
        public WindowEditLocation(SDLmedia_Location location, string userName, bool isNew)
        {
          InitializeComponent();
          IsNew = isNew;
          if (location != null)
          {
            NewLocation = location;
            NewLocation.CreatedByUser = userName;
            NewLocation.CreatedDate = DateTime.Now;
          }
          else
          {
            NewLocation = new SDLmedia_Location();
            NewLocation.CreatedByUser = userName;
            NewLocation.CreatedDate = DateTime.Now;
            NewLocation.Enabled = true;
          }
     
          DataFormLocation.CurrentItem = NewLocation;
          DataFormLocation.BeginEdit();
        }
     
        private void DataFormLocation_EditEnded(object sender, EditEndedEventArgs e)
        {
          if(e.EditAction == EditAction.Cancel)
          {
            NewLocation = null;
            DataFormLocation.CancelEdit();
            DialogResult = false;
            Close();
          }
          if(e.EditAction == EditAction.Commit)
          {
            if(DataFormLocation.ValidateItem())
            {
              DialogResult = true;
              Close();                             
            }
            else
            {
              DataFormLocation.CancelEdit();
              DialogResult = false;                   
            }
          }
        }
     
        private void DataFormLocation_AutoGeneratingField(object sender, AutoGeneratingFieldEventArgs e)
        {
          e.DataField.Width = 340;
          if(IsNew)
          {
            if(e.PropertyName.Equals("LocationID"))
            {
              e.DataField.Visibility = Visibility.Collapsed;
            }
          }
          else
          {
            if (e.PropertyName.Equals("LocationID"))
            {
              e.DataField.IsEnabled = false;
            }       
          }
     
          if(e.PropertyName.Equals("CreatedDate"))
          {
            e.DataField.IsEnabled = false;
          }
          else if (e.PropertyName.Equals("CreatedByUser"))
          {
            e.DataField.IsEnabled = false;
          }
     
        }
     
      }
    }


  2. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 11 Apr 2011 Link to this post

    Hi Richard ,

    It seems you have hit a bug in RadDataForm . Thanks for reporting the issue. It has been addressed immediately and the fix will be present in the latest internal build . The build will be available for download in your account later today or tomorrow.

    One more time thank you for the feedback ! I am updating your Telerik points.

    Regards,
    Pavel Pavlov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. DevCraft banner
  4. Nathaniel
    Nathaniel avatar
    1 posts
    Member since:
    Mar 2011

    Posted 15 Apr 2011 Link to this post

    OK, I just downloaded the latest build and ValidateItem() is always true!

    I'm testing with a RadDomainDataSource using metadata annotations to set a required field as required.  When I delete the data in the field and submit, calling ValidateItem() in either the EditEnding or EditEnded events returns true, even though the RadDataForm highlights the missing field as needing to be required.

    Thoughts?

    Edited to add:

    It works correctly if I AutoGenerate the columns, but not when I declare which columns I want to use.  Perhaps I'm missing an attribute in my XAML?
  5. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 21 Apr 2011 Link to this post

    Hi ,

    If I understand the problem correctly, then setting the  ValidatesOnExceptions attribute of the DataMember binding to true should do the trick .

    For example :
    <telerik:DataFormDataField DataMemberBinding="{Binding MyProperty, Mode=TwoWay,ValidatesOnExceptions=True}"
    Regards,
    Pavel Pavlov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  6. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 21 Apr 2011 Link to this post

    Hi,

    Just a small addition , actually there are two attributes(ValidatesOnExceptions and NotifyOnValidationError )  to set here in order to have validation on filed level and validation in summary :
    <telerik:DataFormDataField DataMemberBinding="{Binding MtProperty, Mode=TwoWay,ValidatesOnExceptions=True, NotifyOnValidationError=True}"


    Regards,
    Pavel Pavlov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  7. john
    john avatar
    12 posts
    Member since:
    Feb 2008

    Posted 21 Apr 2011 Link to this post

    Thanks Guys, I just ran into this problem 2 days ago and found this post.  I was waiting for the update since it was critical to my program.  Now the only issue I have is an addnew Item.  For some reason unless a field with validation on it is changed, the form responds as through it is valid.

    The code myRadDataForm.ValidateItem() returns true even though a field is blank.  Now if I type a character in bound text box and then delete it and try to save, it comes back with the validation error "Required Field".  So it's only responding if I change a value for a required field, even though it's final value is technically null again.

    Can you help me get the validator to check even if nothing has been typed in by the user on a new record?

    Oh, it might help to let you know that i'm using myRadDataForm.AddNewItem() function.  Would it make a difference if I manually created an entity object and added it to the currentItem in the form.

    Thanks,
    Luke
  8. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 22 Apr 2011 Link to this post

    Hello john,

    We have recently found this inconsistency with the required attribute. We are working on solving the issue.  Meanwhile there is a workaround I may offer.
    You may handle the Validating event. Inside the event handler explicitly check if the required fields are blank , and id so set e.cancel = true. This will prevent the form from exiting edit mode , when required fields are not entered.

    Regards,
    Pavel Pavlov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  9. William
    William avatar
    4 posts
    Member since:
    Aug 2010

    Posted 04 May 2011 Link to this post

    Pavel,
        Per your suggestion of checking the required fields, is there anyway to interate throught the fields on the dataform to check if they are required?  I cannot find a collection of DataFormDataFields. 

    When autogenerating my dataform, I am setting some datafields as required, and want to find those during validation.

    Thanks,
        Bill
  10. Ivan Ivanov
    Admin
    Ivan Ivanov avatar
    1127 posts

    Posted 05 May 2011 Link to this post

    Hi William,

    You might like to try this approach:
    private void testDataForm_ValidatingItem(object sender, CancelEventArgs e)
           {
               foreach (var pi in typeof(Employee).GetProperties().Where(p => p.GetCustomAttributes(true).Contains(new RequiredAttribute())))
               {
                   if (pi.GetValue(testDataForm.CurrentItem, null) == null)
                       e.Cancel = true;
               }
           }
    where Employee is my business object. In this way you can check the properties, which have Reuires attribute set.

    Kind regards,
    Ivan Ivanov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  11. William
    William avatar
    4 posts
    Member since:
    Aug 2010

    Posted 06 May 2011 Link to this post

    Ivan,
        When I the data form is being auto generate, I am looking an some other factors to determine if the datafield is required and with in the autogeneratingfield event of the data form I am setting e.DataField.IsRequired to true.  I do not believe this makes it back to my business object, as the code that you have suggested does not pick up these datafields that I set to required.

    During AutoGenerate, I can produce a list of fields that were flagged as required and using logic similar to yours I can identify which fields were flagged as required and set e.cancel to true in the validateitems event, but I cannot figure out how to mark the datafield in the dataform as having a validation issue. 

    In grid validation, I can call markcell and place text in the validation error. I cannot seem to do this in the dataform.

    Thanks,
        Dave
  12. William
    William avatar
    4 posts
    Member since:
    Aug 2010

    Posted 06 May 2011 Link to this post

    Ivan,
        Never mind that last post...i figured out that you can add to the validation errors collection of the business object and that will display.

    It would just be very helpful if things worked consistantly...I would have expected that the validation for the dataform would have worked much like the grid since they are typically used hand in hand.

    Bill
Back to Top
DevCraft banner