![]() |
VOOZH | about |
Syncfusion AI Assistant
SfDataForm
The Xamarin DataForm (SfDataForm) control helps editing the data fields of any data object. It can be used to develop various forms such as login, reservation, data entry, etc. Key features includes the following:
11 Jun 202624 minutes to read
This section explains the quick overview to use the Xamarin DataForm (SfDataForm) (SfDataForm) for Xamarin.Forms in your application.
After installing Essential Studioยฎ for Xamarin, you can find all the required assemblies in the installation folders, {Syncfusion Essential Studio Installed location} \Essential Studio\{Version #}\Xamarin\lib.
E.g.: C:\Program Files (x86) \Syncfusion\Essential Studio\19.1.0.54\Xamarin\lib
NOTE
Assemblies can be found in unzipped package location(Documents/Syncfusion/{Version #}/Xamarin/lib) in Mac.
You can add SfDataForm reference using one of the following methods:
Method 1: Adding SfDataForm reference from nuget.org
Syncfusion Xamarin components are available in nuget.org. To add SfDataForm to your project, open the NuGet package manager in Visual Studio, search for Syncfusion.Xamarin.SfDataForm, and then install it.
๐ Adding SfDataForm reference from NuGet
NOTE
Install the same version of SfDataForm NuGet in all the projects.
Method 2: Adding SfDataForm reference from toolbox
Syncfusion also provides Xamarin Toolbox. Using this toolbox, you can drag the SfDataForm control to the XAML page. It will automatically install the required NuGet packages and add the namespace to the page. To install Syncfusion Xamarin Toolbox, refer to Toolbox.
Method 3: Adding SfDataForm assemblies manually from the installed location
If you prefer to manually reference the assemblies instead referencing from NuGet, add the following assemblies in respective projects.
Location: {Installed location}/{version}/Xamarin/lib
| PCL | Syncfusion.SfDataForm.XForms.dll Syncfusion.SfNumericTextBox.XForms.dll Syncfusion.SfNumericUpDown.XForms.dll Syncfusion.SfComboBox.XForms.dll Syncfusion.SfAutoComplete.XForms.dll Syncfusion.Buttons.XForms.dll Syncfusion.SfMaskedEdit.XForms.dll Syncfusion.Core.XForms.dll Syncfusion.Licensing.dll System.ComponentModel.Annotations |
| Android | Syncfusion.SfDataForm.XForms.dll Syncfusion.SfDataForm.XForms.Android.dll Syncfusion.SfNumericTextBox.Android.dll Syncfusion.SfNumericTextBox.XForms.dll Syncfusion.SfNumericTextBox.XForms.Android.dll Syncfusion.SfNumericUpDown.XForms.dll Syncfusion.SfNumericUpDown.XForms.Android.dll Syncfusion.SfComboBox.XForms.dll Syncfusion.SfComboBox.XForms.Android.dll Syncfusion.SfAutoComplete.XForms.dll Syncfusion.SfAutoComplete.XForms.Android.dll Syncfusion.Buttons.XForms.dll Syncfusion.Buttons.XForms.Android.dll Syncfusion.SfMaskedEdit.XForms.dll Syncfusion.SfMaskedEdit.XForms.Android.dll Syncfusion.Core.XForms.dll Syncfusion.Core.XForms.Android.dll Syncfusion.Licensing.dll |
| iOS | Syncfusion.SfDataForm.XForms.dll Syncfusion.SfDataForm.XForms.iOS.dll Syncfusion.SfNumericTextBox.XForms.dll Syncfusion.SfNumericTextBox.XForms.iOS.dll Syncfusion.SfNumericUpDown.XForms.dll Syncfusion.SfNumericUpDown.XForms.iOS.dll Syncfusion.SfComboBox.XForms.dll Syncfusion.SfComboBox.XForms.iOS.dll Syncfusion.SfAutoComplete.XForms.dll Syncfusion.SfAutoComplete.XForms.iOS.dll Syncfusion.Buttons.XForms.dll Syncfusion.Buttons.XForms.iOS.dll Syncfusion.SfMaskedEdit.XForms.dll Syncfusion.SfMaskedEdit.XForms.iOS.dll Syncfusion.Core.XForms.dll Syncfusion.Core.XForms.iOS.dll Syncfusion.Licensing.dll |
| UWP | Syncfusion.SfDataForm.XForms.dll Syncfusion.SfDataForm.XForms.UWP.dll Syncfusion.SfInput.UWP.dll Syncfusion.SfShared.UWP.dll Syncfusion.SfNumericTextBox.XForms.UWP.dll Syncfusion.SfNumericTextBox.XForms.dll Syncfusion.SfNumericUpDown.XForms.UWP.dll Syncfusion.SfNumericUpDown.XForms.dll Syncfusion.SfComboBox.XForms.dll Syncfusion.SfComboBox.XForms.UWP.dll Syncfusion.SfAutoComplete.XForms.dll Syncfusion.SfAutoComplete.XForms.UWP.dll Syncfusion.Buttons.XForms.dll Syncfusion.Buttons.XForms.UWP.dll Syncfusion.SfMaskedEdit.XForms.dll Syncfusion.SfMaskedEdit.XForms.UWP.dll Syncfusion.Core.XForms.dll Syncfusion.Core.XForms.UWP.dll Syncfusion.Licensing.dll |
NOTE
To know more about obtaining our components, refer to these links for Mac and Windows.
IMPORTANT
Starting with v16.2.0.x, if you reference Syncfusion assemblies from the trial setup or from the NuGet feed, you also have to include a license key in your projects. Please refer to Syncfusion license key to know about registering Syncfusion license key in your Xamarin application to use our components.
To use the data form inside an application, each platform application must initialize the data form renderer. This initialization step varies from platform to platform and is discussed in the following sections:
The Android launches the data form without any initialization and is enough to only initialize the Xamarin.Forms Framework to launch the application.
NOTE
If you are adding the references from toolbox, this step is not needed.
To launch the data form in iOS, call the SfDataFormRenderer.Init() in the FinishedLaunching overridden method of the AppDelegate class after the Xamarin.Forms Framework initialization and before the LoadApplication is called, as demonstrated in the following code example:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
โฆ
global::Xamarin.Forms.Forms.Init ();
SfDataFormRenderer.Init();
LoadApplication (new App ());
โฆ
}The UWP launches the data form without any initialization and is enough to only initialize the Xamarin.Forms Framework to launch the application.
The known Framework issue in UWP platform is that the custom controls will not render when deployed the application in Release Mode.
The above problem can be resolved by initializing the data form assemblies in App.xaml.cs file in UWP project as in the following code snippet:
// In App.xaml.cs
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
โฆ
rootFrame.NavigationFailed += OnNavigationFailed;
// you'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();
//Now, add all the assemblies your app uses
assembliesToInclude.Add(typeof(SfDataFormRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfNumericTextBoxRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfNumericUpDownRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfSegmentedControlRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfComboBoxRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfCheckBoxRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfRadioButtonRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfMaskedEditRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfTextInputLayoutRenderer).GetTypeInfo().Assembly);
assembliesToInclude.Add(typeof(SfAutoCompleteRenderer).GetTypeInfo().Assembly);
// replaces Xamarin.Forms.Forms.Init(e);
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
โฆ
}In this section, you will create Xamarin.Forms application with SfDataForm. The control should be configured entirely in C# code.
Create a new BlankApp (.Net Standard) application in Xamarin Studio or Visual Studio for Xamarin.Forms.
To add the data form to your application, follow the steps:
xmlns:dataForm="clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms in XAML Page.<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:GettingStarted"
xmlns:dataForm="clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms"
x:Class="GettingStarted.MainPage">
<dataForm:SfDataForm x:Name="dataForm"/>
</ContentPage>using Syncfusion.XForms.DataForm;
using Xamarin.Forms;
namespace GettingStarted
{
public partial class MainPage : ContentPage
{
SfDataForm dataForm;
public MainPage()
{
InitializeComponent();
dataForm = new SfDataForm();
}
}
}The SfDataForm is a data edit control so, create a data object to edit the data object.
Here, the data object named ContactsInfo created with some properties.
public class ContactsInfo
{
private string firstName;
private string middleName;
private string lastName;
private string contactNo;
private string email;
private string address;
private DateTime? birthDate;
private string groupName;
public ContactsInfo()
{
}
public string FirstName
{
get { return this.firstName; }
set
{
this.firstName = value;
}
}
public string MiddleName
{
get { return this.middleName; }
set
{
this.middleName = value;
}
}
public string LastName
{
get { return this.lastName; }
set
{
this.lastName = value;
}
}
public string ContactNumber
{
get { return contactNo; }
set
{
this.contactNo = value;
}
}
public string Email
{
get { return email; }
set
{
email = value;
}
}
public string Address
{
get { return address; }
set
{
address = value;
}
}
public DateTime? BirthDate
{
get { return birthDate; }
set
{
birthDate = value;
}
}
public string GroupName
{
get { return groupName; }
set
{
groupName = value;
}
}
}NOTE
If you want your data model to respond to property changes, then implement
INotifyPropertyChangedinterface in your model class.
Create a model repository class with ContactsInfo property initialized with required data in a new class file as shown in the following code example and save it ViewModel.cs file:
public class ViewModel
{
private ContactsInfo contactsInfo;
public ContactsInfo ContactsInfo
{
get { return this.contactsInfo; }
set { this.contactsInfo = value; }
}
public ViewModel()
{
this.contactsInfo = new ContactsInfo();
}
}To populate the labels and editors in the data form, set the DataObject property.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:GettingStarted"
xmlns:dataForm="clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms"
x:Class="GettingStarted.MainPage">
<ContentPage.BindingContext>
<local:ViewModel/>
</ContentPage.BindingContext>
<dataForm:SfDataForm x:Name="dataForm"
DataObject="{Binding ContactsInfo}"/>
</ContentPage>dataForm.DataObject = new ContactsInfo();Now, run the application to render the data form to edit the data object as in the following screenshot:
๐ Setting data object to data form in Xamarin.Forms DataForm
You can download the entire source code of this demo for Xamarin.Forms from here DataFormGettingStarted.
The data form control automatically generates DataFormItems (which has UI settings of data field) when the data object set to the SfDataForm.DataObject property. The DataFormItem encapsulates the layout and editor setting for the data field appearing in the data form. When the DataFormItems are generated, you can handle the SfDataForm.AutoGeneratingDataFormItem event to customize or cancel the DataFormItem.
The type of input editor generated for the data field depends on the type and attribute settings of the property. The following table lists the DataFormItem and its constraints for generation:
| Generated DataFormItem Type | Data Type / Attribute |
|---|---|
| Default DataFormItem generated for the String type and the properties with [DataType(DataType.Text)], [DataType(DataType.MultilineText)] and [DataType(DataType.Password)] attributes. | |
| Generated for the Int or Double type property. [DataType(DataType.Currency)]. [DataType("Percent")] | |
| Generated for the DateTime type property. [DataType(DataType.Date)]. [DataType(DataType.DateTime)]. | |
| Generated for the DataTime type property. [DataType(DataType.Time)]. | |
| Generated for the Enum type property. [EnumDataTypeAttribute] | |
| Generated for the Enum type property. [EnumDataTypeAttribute] | |
| Generated for the Bool type property. [BoolDataTypeAttribute] | |
| Generated for the PhoneNumber type property. [DataType(DataType.PhoneNumber)] | |
| Generated for the Enum type property. [EnumDataTypeAttribute] | |
| Generated for the Enum type property. [EnumDataTypeAttribute] |
The following list of editors are supported:
| Editor | Data Type/Attribute | Input control loaded |
|---|---|---|
| Text | The String type property and any other type apart from the following specified cases. | |
| MultilineText | The String type property with multi line text. [DataType(DataType.Multiline)] | |
| Numeric | Int or Double type property. | |
| Percent | The Int or Double type Property with percent value. [DataType("Percent")]]. | |
| Currency | The Int or Double type property with currency value. [DataType(DataType.Currency)]. | |
| Date | The DateTime type property with date value. [DataType(DataType.Date)] [DataType(DataType.DateTime)] | |
| Time | Property with [DataType(DataType.Time)] attribute. | |
| NumericUpDown | Int or Double type property. | |
| Segment | Enum type property. | |
| Bool | Bool type property. | |
| Switch | Bool type property. | |
| Picker | Enum and List type property. [EnumDataTypeAttribute] | |
| DropDown | Enum and List type property. [EnumDataTypeAttribute] | |
| AutoComplete | Enum and List type property. [EnumDataTypeAttribute] | |
| Password | The String type property with [DataType(DataType.Password)] attribute. | |
| RadioGroup | Enum and List type property. [EnumDataTypeAttribute] | |
| MaskedEditText | Property with [DataType(DataType.PhoneNumber)] attribute. |
By default, the data form arranges the label at left side and input control at the right side. You can change the label position by setting the SfDataForm.LabelPosition property. You can position the label from left to top of the input control by setting the LabelPosition as Top.
<dataForm:SfDataForm LabelPosition="Top"/>dataForm.LabelPosition = LabelPosition.Top;๐ Setting label position to data form item in Xamarin.Forms DataForm
By default, the data form arranges one data field per row. It is possible to have more than one date field per row by setting the ColumnCount property which provides grid like layout for the data form.
<dataForm:SfDataForm ColumnCount="2"/>dataForm.ColumnCount = 2;๐ Setting column count to data form in Xamarin.Forms DataForm
StackLayout positions the child elements one after another either horizontally or vertically. Space of the StackLayout depends on the HorizontalOptions and VerticalOptions properties. Views in a stack layout can be sized based on space in the layout using layout options.
The DataForm control can be loaded inside any layout such as Grid, StackLayout, etc. When loading DataForm inside a StackLayout, set the HorizontalOptions and VerticalOptions properties of DataForm, and set parent(StackLayout) of DataForm to LayoutOptions.FillAndExpand.
Refer to the following code example to load the DataForm control inside a StackLayout. Set the VerticalOptions and HorizontalOptions of the StackLayout and DataForm to FillAndExpand.
<StackLayout x:Name="stackLayout" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<dataForm:SfDataForm x:Name="dataForm" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
</StackLayout>public partial class MainPage : ContentPage
{
StackLayout StackLayout;
SfDataForm dataForm;
public MainPage()
{
InitializeComponent();
stackLayout = new StackLayout();
stackLayout.VerticalOptions = LayoutOptions.FillAndExpand;
stackLayout.HorizontalOptions = LayoutOptions.FillAndExpand;
dataForm = new SfDataForm();
dataForm.DataObject = new ContactInfo();
dataForm.VerticalOptions = LayoutOptions.FillAndExpand;
dataForm.HorizontalOptions = LayoutOptions.FillAndExpand;
stackLayout.Children.Add(dataform);
this.Content = stackLayout;
}
}๐ Launching data form inside a StackLayout Xamarin.Forms DataForm
The DataForm can be loaded with specific height and width inside different layouts using the SfDataForm.HeightRequest and SfDataForm.WidthRequest properties.
<dataForm:SfDataForm x:Name="dataForm" WidthRequest="300"
HeightRequest="300"
VerticalOptions="CenterAndExpand"
HorizontalOptions="Center"/>dataForm.HeightRequest = 300;
dataForm.WidthRequest = 300;
dataForm.VerticalOptions = LayoutOptions.CenterAndExpand;
dataForm.HorizontalOptions = LayoutOptions.Center;๐ Loading data form with customized height and width Xamarin.Forms DataForm
By default, the data form enables editing of the data field. You can disable editing by setting the IsReadOnly property of the data form. You can enable or disable editing for a particular data field by setting the IsReadOnly property of DataFormItem in the AutoGeneratingDataFormItem event. The data field editing behavior can also be defined by using EditableAttribute
The Xamarin.Forms SfDataForm Knowledge Base section contains responses to some of the most common questions that other customers have asked us before. So this will be a good place to search for topics that are not covered in the user guide.
Similar to the Knowledge Base, the forum section also contains responses to questions that other customers have asked us in the past.
How to render DataForm using MVVMCross in Xamarin.Forms
How to render DataForm using RealmObject in Xamarin.Forms
How to render DataForm using ReactiveUI in Xamarin.Forms
How to bind data object in Xamarin.Forms DataForm (SfDataForm) using Fresh MVVM framework
How to bind data object in Xamarin.Forms DataForm(SfDataForm) using Prism framework
How to import and export data objects from SQLite Offline database into Dataform (SfDataForm)
How to render DataForm using FSharp application in Xamarin.Forms
How to bind JSON data to Xamarin.Forms DataForm (SfDataForm)