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

Apply DataTemplate for dynamically generate columns r RadGridView

1 Answer 326 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Vajda
Top achievements
Rank 1
Vajda asked on 15 Nov 2014, 12:54 PM
Hi,

in MVVM scenario I need dynamically generate columns for RadGridView.

I created attached property for this purpose.

ItemSource is bind to property ObservableCollection<Company> Companies from VM

where Company is

    
public class Company : INotifyPropertyChanged
    {
        public Company()
        {
            Dept = new Dictionary<string, User>();
        }
 
        private Dictionary<string,User> dept;
 
        public Dictionary<string,User> Dept
        {
            get { return dept; }
 
            set
            {
                dept = value;
                OnPropertyChanged("Dept");
            }
        }
    }

and User is

    
public class User : INotifyPropertyChanged
    {
 
        private string firstName;
 
        public string FirstName
        {
            get { return firstName; }
 
            set
            {
                firstName = value;
                OnPropertyChanged("FirstName");
            }
        }
 
        private string lastName;
 
        public string LastName
        {
            get { return lastName; }
 
            set
            {
                lastName = value;
                OnPropertyChanged("LastName");
            }
        }
    }


I generate columns in VM in this way.

In VM I have property ObservableCollection<ColumnDefinition> which is bind to attached property in View.

ColumnDefinition is abstraction for GridViewDataColumn.

<telerik:RadGridView ItemsSource="{Binding Path=Country.Companies, UpdateSourceTrigger=PropertyChanged}"
                     dynamicCol:RadGridViewColumnsBinding.ColumnsCollection="{Binding Path=Columns}">
    <telerik:RadGridView.Resources>
        <DataTemplate x:Key="UserTemplate"
                      DataType="{x:Type models:User}">
            <StackPanel>
                <TextBlock Text="LastName:" />
                <TextBlock Text="{Binding Path=LastName}" />
            </StackPanel>
        </DataTemplate>
    </telerik:RadGridView.Resources>
</telerik:RadGridView>


When I need add column to RadGridView I add ColumnDefinition obj to property Columns.

I need apply DataTemplate on GridViewDataColumn and this is which not work for me.

Exactly binding to property User.LastName in DataTemplate not work.

I use this binding exp for GridViewDataColumn 

                      
string bindingExp = string.Format("Dept[{0}]", columnName);
//string bindingExp = string.Format("Dept[{0}].LastName", columnName); // whithout datatemplate this work
 
                      var binding = new Binding(bindingExp)
                      {
                          UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
 
                      };
 
                      Columns.Add(new ColumnDefinition
                      {
                          Header = columnName,
                          DataMemberBinding = binding,
                          Tag = ColumnTag,
                          UniqueName = Guid.NewGuid().ToString(),
                          CellTemplateName = "UserTemplate",
                      });




I try attached several times sample project but always get error:

The selected file(s) cannot be attached because it may exceed the maximum attachment size (2 MB) or is from not allowed type (allowed: .gif, .jpg, .jpeg, .png).

Attached file size is 74 KB.

Hence I uploded sample project to onedrive.

You can download here.

1 Answer, 1 is accepted

Sort by
0
Dimitrina
Telerik team
answered on 17 Nov 2014, 02:43 PM
Hello,

In order to have predefined columns, I would suggest you to use a Behavior for setting RadGridView.Columns collection. You can check the "Binding Columns From ViewModel" sdk example on how to do so. Although GitHub is a very well-known platform we saw a better and easier approach for reviewing our examples by developing our SDK Samples Browser.

I hope this helps.


Regards,
Dimitrina
Telerik
 

Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

 
Tags
GridView
Asked by
Vajda
Top achievements
Rank 1
Answers by
Dimitrina
Telerik team
Share this question
or