New to Telerik UI for WPFStart a free 30-day trial

Binding to a DataSet

Updated on Sep 15, 2025

This article demonstrates how to bind a RadGridView to data coming from a DataSet.

Setting up the ViewModel

Example 1 demonstrates how you can set up a ViewModel containing a DataSet in order to bind it to the RadGridView.

Example 1: Setting up the ViewModel

C#
	public class MainViewModel : ViewModelBase
    {
        private DataSet dataSet;
        public DataSet DataSet
        {
            get
            {
                if (this.dataSet == null)
                {
                    this.dataSet = this.CreateDataSet();
                }

                return this.dataSet;
            }
        }

        private DataSet CreateDataSet()
        {
            DataSet dataSet = new DataSet();
            var parentTable = new DataTable("Managers");
            dataSet.Tables.Add(parentTable);

            parentTable.Columns.Add(new System.Data.DataColumn("Id", typeof(int)));
            parentTable.Columns.Add(new System.Data.DataColumn("FirstName", typeof(string)));
            parentTable.Columns.Add(new System.Data.DataColumn("LastName", typeof(string)));
            parentTable.Columns.Add(new System.Data.DataColumn("City", typeof(string)));
            parentTable.PrimaryKey = new DataColumn[] { parentTable.Columns["Id"] };

            for (int i = 1; i <= 50; i++)
            {
                var row = parentTable.NewRow();
                row["Id"] = i;
                row["FirstName"] = "FirstName " + i;
                row["LastName"] = "LastName" + i;
                row["City"] = "City " + i;
                parentTable.Rows.Add(row);
            }

            var childTable = new DataTable("Employees");
            dataSet.Tables.Add(childTable);

            childTable.Columns.Add(new System.Data.DataColumn("Id", typeof(int)));
            childTable.Columns.Add(new System.Data.DataColumn("ManagerId", typeof(int)));
            childTable.Columns.Add(new System.Data.DataColumn("FirstName", typeof(string)));
            childTable.Columns.Add(new System.Data.DataColumn("LastName", typeof(string)));
            childTable.Columns.Add(new System.Data.DataColumn("City", typeof(string)));
            childTable.PrimaryKey = new DataColumn[] { childTable.Columns["Id"] };

            DataColumn fkColumn = childTable.Columns["ManagerId"];
            DataColumn pkColumn = parentTable.Columns["Id"];

            // required to enable hierarchy
            parentTable.ChildRelations.Add(new DataRelation("ParentChildRelation", pkColumn, fkColumn));

            for (int i = 1; i <= 500; i++)
            {
                var row = childTable.NewRow();
                row["Id"] = i + 50;
                row["ManagerId"] = (i % 50) + 1;
                row["FirstName"] = "FirstName " + i;
                row["LastName"] = "LastName" + i;
                row["City"] = "City " + i;
                childTable.Rows.Add(row);
            }

            return dataSet;
        }
    }

lease note that the DataRelation is required for RadGridView to generate the hierarchy automatically.

Example 2 demonstrates how the RadGridView is set up in XAML.

Example 2: Setting up the RadGridView

XAML
	<Grid>
        <Grid.DataContext>
            <!-- The namespace "local" refers to the namespace where the MainViewModel class is defined-->
            <local:MainViewModel />
        </Grid.DataContext>
        <telerik:RadGridView ItemsSource="{Binding DataSet}"
                             AutoGenerateColumns="False"
                             GroupRenderMode="Flat"
                             Margin="5">
            <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}"/>
				<telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}"/>
				<telerik:GridViewDataColumn DataMemberBinding="{Binding City}" />
			</telerik:RadGridView.Columns>
		</telerik:RadGridView>
		
	</Grid>

If updates to the hierarchy are required during runtime, you can invoke RadGridView's BuildHierarchyFromDataSet method.

See Also

In this article
Setting up the ViewModelSee Also
Not finding the help you need?
Contact Support