Defining Silverlight DataGrid Columns at Runtime
This post has been updated to work with the RTW version of the Silverlight 2 DataGrid. The code examples are not guaranteed to work with previous Beta versions of the DataGrid. Read more about the features that the Silverlight 2 DataGrid has to offer... |
Now that you know the basics of the Silverlight DataGrid and how to specify the Columns in XAML, you might want to customize your DataGrid's columns at runtime.
This process is pretty straight forward, so instead of doing the usual end-to-end walk through, I'm going to provide you with a Rosetta Stone between the static XAML form and the dynamic C#/VB form for the scenario in the last post.
Defining a DataGrid
For any of these columns to be useful you are going to first need a DataGrid to add them to. The following creates a DataGrid, adds it as a child of the root layout Grid, and sets its ItemsSource to a collection called "source".
C#
DataGrid targetDataGrid = new DataGrid();
targetDataGrid.ItemsSource = source;
targetDataGrid.AutoGenerateColumns = false;
LayoutRoot.Children.Add(targetDataGrid);
VB
Dim TargetDataGrid As New DataGrid
TargetDataGrid.ItemsSource = Source
TargetDataGrid.AutoGenerateColumns = False
LayoutRoot.Children.Add(TargetDataGrid)
Defining a DataGrid Text Column
The following creates a DataGridTextColumn bound to the FirstName property with a header of "First Name", and adds it to the columns collection of the DataGrid named "targetDataGrid".
Static
<data:DataGrid x:Name="targetDataGrid">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="First Name"
Binding="{Binding FirstName}" />
</data:DataGrid.Columns>
</data:DataGrid>
Dynamic
C#
using System.Windows.Data;
...
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "First Name";
textColumn.Binding = new Binding("FirstName");
targetDataGrid.Columns.Add(textColumn);
VB
Imports System.Windows.Data
...
Dim TextColumn As New DataGridTextColumn
TextColumn.Header = "First Name"
TextColumn.Binding = New Binding("FirstName")
TargetDataGrid.Columns.Add(TextColumn)
Defining a DataGrid CheckBox Column
The following creates a DataGridCheckColumn bound to the Available property with a header of "Available", and adds it to the columns collection of the DataGrid named "targetDataGrid".
Static
<data:DataGrid x:Name="targetDataGrid">
<data:DataGrid.Columns>
<data:DataGridCheckBoxColumn Header="Available "
Binding="{Binding Available}" />
</data:DataGrid.Columns>
</data:DataGrid>
Dynamic
C#
using System.Windows.Data;
...
DataGridCheckBoxColumn checkBoxColumn = new DataGridCheckBoxColumn();
checkBoxColumn.Header = "Available";
checkBoxColumn.Binding = new Binding("Available");
targetDataGrid.Columns.Add(checkBoxColumn);
VB
Imports System.Windows.Data
...
Dim CheckBoxColumn As New DataGridCheckBoxColumn
CheckBoxColumn.Header = "Available"
CheckBoxColumn.Binding = New Binding("Available")
TargetDataGrid.Columns.Add(CheckBoxColumn)
Defining a DataGrid Template Column
The following creates a DataGridTemplateColumn bound to the Birthday property with a header of "Birthday", and adds it to the columns collection of the DataGrid named "targetDataGrid".
Static
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />
</UserControl.Resources>
...
<data:DataGrid x:Name="targetDataGrid" AutoGenerateColumns="False" >
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="Birthday">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Birthday,
Converter={StaticResource DateConverter}}"
Margin="4"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<basics:DatePicker
SelectedDate="{Binding Birthday, Mode=TwoWay}" />
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
Dynamic
There are two ways to dynamically create a template column for a DataGrid. One is to load in the CellTemplate and CellEditingTemplates as DataTemplates from resources, and the other is to construct the DataTemplates on the fly using XamlReader.
1. Resources Method
This method creates the CellTemplate DataTemplate and the CellEditingTemplate DataTemplate in XAML and stores them as named resources. Then when the column is created the DataTemplates are used.
Use the below XAML to create the DataTemplates as resources to support the code for this method.
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />
<DataTemplate x:Key="myCellTemplate">
<TextBlock
Text="{Binding Birthday,
Converter={StaticResource DateConverter}}"
Margin="4"/>
</DataTemplate>
<DataTemplate x:Key="myCellEditingTemplate">
<basics:DatePicker
SelectedDate="{Binding Birthday, Mode=TwoWay}" />
</DataTemplate>
</UserControl.Resources>
C#
using System.Windows.Data;
...
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Birthday";
templateColumn.CellTemplate = (DataTemplate)Resources["myCellTemplate"];
templateColumn.CellEditingTemplate =
(DataTemplate)Resources["myCellEditingTemplate"];
targetDataGrid.Columns.Add(templateColumn);
VB
Imports System.Windows.Data
...
Dim TemplateColumn As New DataGridTemplateColumn
TemplateColumn.Header = "Birthday"
TemplateColumn.CellTemplate = Resources("myCellTemplate")
TemplateColumn.CellEditingTemplate = Resources("myCellEditingTemplate")
TargetDataGrid.Columns.Add(TemplateColumn)
2. XamlReader Method
This method creates the DataTemplate inline using the XamlReader class. This class takes a string and parses it to try to build a visual tree. In this case we are creating DataTemplates. This method is especially useful if the DataTemplate itself has to be dynamic. One example being if you wanted to modify what the element in the template was bound to.
Warning: This method is considerably more difficult than the resources method. I recommend only using this if you need to dynamically create the DataTemplate.
Some things to watch out for:
- You will need to declare any XAML namespace that is used in the data template
- Any custom XAML namespace needs to specify both the clr-namespace and the assembly
- You cannot have white space between the xmlns: and the name of your namespace
- External resources cannot be referenced, they need to be declared inline
- The entire template is a single line, so if you get a XAML Parse exception, it will always say line 1, however the character is fairly accurate if you were to concatenate all of your lines.
- When using the StringBuilder approach shown below, make sure that you have the correct white space at the end of a line so that it is correctly separated when concatenated with the next line.
Now that the warnings are out of the way, here is how you do the equivalent of the code above:
C#
using System.Windows.Data;
using System.Windows.Markup;
using System.Text;
...
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Birthday";
StringBuilder CellTemp = new StringBuilder();
CellTemp.Append("<DataTemplate ");
CellTemp.Append("xmlns='https://schemas.microsoft.com/winfx/");
CellTemp.Append("2006/xaml/presentation' ");
CellTemp.Append("xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml' ");
//Be sure to replace "YourNamespace" and "YourAssembly" with your app's
//actual namespace and assembly here
CellTemp.Append("xmlns:local = 'clr-namespace:YourNamespace");
CellTemp.Append(";assembly=YourAssembly'>");
CellTemp.Append("<Grid>");
CellTemp.Append("<Grid.Resources>");
CellTemp.Append("<local:DateTimeConverter x:Key='DateConverter' />");
CellTemp.Append("</Grid.Resources>");
CellTemp.Append("<TextBlock ");
CellTemp.Append("Text = '{Binding Birthday, ");
CellTemp.Append("Converter={StaticResource DateConverter}}' ");
CellTemp.Append("Margin='4'/>");
CellTemp.Append("</Grid>");
CellTemp.Append("</DataTemplate>");
StringBuilder CellETemp = new StringBuilder();
CellETemp.Append("<DataTemplate ");
CellETemp.Append("xmlns='https://schemas.microsoft.com/winfx/");
CellETemp.Append("2006/xaml/presentation' ");
CellETemp.Append("xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml' ");
CellETemp.Append("xmlns:basics='clr-namespace:System.Windows.Controls;");
CellETemp.Append("assembly=System.Windows.Controls' >");
CellETemp.Append("<basics:DatePicker ");
CellETemp.Append("SelectedDate='{Binding Birthday, Mode=TwoWay}' />");
CellETemp.Append("</DataTemplate>");
templateColumn.CellTemplate =
(DataTemplate)XamlReader.Load(CellTemp.ToString());
templateColumn.CellEditingTemplate =
(DataTemplate)XamlReader.Load(CellETemp.ToString());
targetDataGrid.Columns.Add(templateColumn);
VB
Imports System.Windows.Data
Imports System.Text
Imports System.Windows.Markup
...
Dim TemplateColumn As New DataGridTemplateColumn
TemplateColumn.Header = "Birthday"
Dim CellTemp As New StringBuilder
CellTemp.Append("<DataTemplate ")
CellTemp.Append("xmlns='https://schemas.microsoft.com/winfx/")
CellTemp.Append("2006/xaml/presentation' ")
CellTemp.Append("xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml' ")
'Be sure to replace "YourNamespace" and "YourAssembly" with your app's
'actual namespace and assembly here
CellTemp.Append("xmlns:local = 'clr-namespace:YourNamespace")
CellTemp.Append(";assembly=YourAssembly'>")
CellTemp.Append("<Grid>")
CellTemp.Append("<Grid.Resources>")
CellTemp.Append("<local:DateTimeConverter x:Key='DateConverter' />")
CellTemp.Append("</Grid.Resources>")
CellTemp.Append("<TextBlock ")
CellTemp.Append("Text = '{Binding Birthday, ")
CellTemp.Append("Converter={StaticResource DateConverter}}' ")
CellTemp.Append("Margin='4'/>")
CellTemp.Append("</Grid>")
CellTemp.Append("</DataTemplate>")
Dim CellETemp As New StringBuilder
CellETemp.Append("<DataTemplate ")
CellETemp.Append("xmlns='https://schemas.microsoft.com/winfx/")
CellETemp.Append("2006/xaml/presentation' ")
CellETemp.Append("xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml' ")
CellETemp.Append("xmlns:basics='clr-namespace:System.Windows.Controls;")
CellETemp.Append("assembly=System.Windows.Controls' >")
CellETemp.Append("<basics:DatePicker ")
CellETemp.Append("SelectedDate='{Binding Birthday, Mode=TwoWay}' />")
CellETemp.Append("</DataTemplate>")
TemplateColumn.CellTemplate = XamlReader.Load(CellTemp.ToString())
TemplateColumn.CellEditingTemplate = XamlReader.Load(CellETemp.ToString())
targetDataGrid.Columns.Add(TemplateColumn)
Comments
Anonymous
April 14, 2008
PingBack from http://microsoftnews.askpcdoc.com/?p=2411Anonymous
April 14, 2008
Now that you know the <a href="http://blogs.msdAnonymous
April 15, 2008
Hi there Scott, i m m trying to create de datagrid dynam but it dosen't show anything.. here is my code: DataGrid dataGrid = new DataGrid(); dataGrid.GridlinesVisibility = DataGridGridlines.Horizontal; dataGrid.HeadersVisibility = DataGridHeaders.Column; dataGrid.ColumnWidth=85; dataGrid.RowHeight=30; if (operacao == "bomb") { //criar colunas dinamicas DataGridTextBoxColumn textBoxColumn = new DataGridTextBoxColumn(); //criar header com sort HyperlinkButton hyperbut = new HyperlinkButton(); hyperbut.Content = "Nº Int"; hyperbut.Tag = "nint"; hyperbut.Click += new RoutedEventHandler(Sort_Click); hyperbut.TextDecorations = TextDecorations.Underline; textBoxColumn.Header = hyperbut; textBoxColumn.DisplayMemberBinding = new Binding("nint"); dataGrid.Columns.Add(textBoxColumn); DataGridTextBoxColumn textBoxColumn1 = new DataGridTextBoxColumn(); //criar header com sort HyperlinkButton hyperbut1 = new HyperlinkButton(); hyperbut1.Content = "Nome"; hyperbut1.Tag = "nome"; hyperbut1.Click += new RoutedEventHandler(Sort_Click); hyperbut1.TextDecorations = TextDecorations.Underline; textBoxColumn1.Header = hyperbut; textBoxColumn1.DisplayMemberBinding = new Binding("nome"); dataGrid.Columns.Add(textBoxColumn1); DataGridTextBoxColumn textBoxColumn2 = new DataGridTextBoxColumn(); //criar header com sort HyperlinkButton hyperbut2 = new HyperlinkButton(); hyperbut2.Content = "Quadro"; hyperbut2.Tag = "quadro"; hyperbut2.Click += new RoutedEventHandler(Sort_Click); hyperbut2.TextDecorations = TextDecorations.Underline; textBoxColumn2.Header = hyperbut; textBoxColumn2.DisplayMemberBinding = new Binding("quadro"); dataGrid.Columns.Add(textBoxColumn2);Anonymous
April 16, 2008
Hi Rui, There are two things that could be missing from your code:
- You are not setting the DataGrid's ItemsSource
- You are not adding the DataGrid to the visual tree I'll update the post to show how to add a DataGrid itself. Let me know if you are doing both those things and still running into trouble. Thanks, Scott
Anonymous
April 16, 2008
Corey Gaudin on The Next Web, Matt Casto's Scrolling Textbox, Martin Mihaylov with an Image ControlAnonymous
April 28, 2008
The comment has been removedAnonymous
April 28, 2008
The comment has been removedAnonymous
April 28, 2008
The comment has been removedAnonymous
April 29, 2008
【原文地址】 April 28th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Silverlight 【原文发表日期】 Monday, April 28, 2008Anonymous
April 30, 2008
Hier vind je mijn laatste link-lijst series . Bekijk ook mijn ASP.NET Tips, Tricks and Tutorials paginaAnonymous
May 02, 2008
Aqui está a última versão da minha série de listas de links . Verifique também minha página de DicasAnonymous
May 21, 2008
Is there a way to add a row in the datagrid? Something like this? targetDataGrid.Rows.Add(templateRow)Anonymous
May 27, 2008
Is it also possible to add a DataRow in code behind? For the Colums you can use: dataGridName.Columns.Add(columnName); But there is no: dataGridName.Rows.Add(rowName); You can define a datagridrow ( DataGridRow rowName = new DataGridRow() ), but than you can't add it to the dataGrid.Anonymous
May 30, 2008
Hi Jordy, Unfortunately all of the rows in the Silverlight DataGrid need to have an equivalent item in the collection that it is bound to, and the "unbound" behavior that you are requesting is not supported currently in the DataGrid. Depending on what you want to accomplish with the new rows there are a couple of paths you could take including adding proxies in your collection, or retemplating the DataGrid to have a row frozen at the bottom used for something like a totals row. Hope this helps.
- Scott
Anonymous
June 15, 2008
The comment has been removedAnonymous
June 26, 2008
Hi, with the xamlReader how do you add an event handler? - if you define it within the stringBuilder, the xamlReader throw an exception. I tried to define it through a style in a ResourceDictionary that I merge later on. If I look for style entry in the resourceDictionary it is there, same for the dataTemplate,but I get an error when the control get rendered. the error is : Cannot find resource named '{mystyle}'. Resource names are case sensitive. Error at object 'System.Windows.Controls.ComboBox' . I double checked in the template I referred to mystyle and same thing in my second dictionary.So error message is inappropriate. It is more an issue to locate the style in the dictionary... any clue?Anonymous
July 17, 2008
Scott, I would like to know how to add a column dynamically after all autogenerated columns have been created. In other words I would like for the grid to generate columns using the binding context, and after this has completed insert a more static or functional column (such as a button) which can be used to interact with the bound data or add additional features. I see the autogenerating column event but there does not appear to be any eventing related to binding having completed or all column generation completed. Is it possible to mix autogeneration with static column insertion and if so how best to do this at runtime? Thanks.Anonymous
July 17, 2008
Is it okay to specify a ConverterParameter using XML literals in the C# code behind? I basically copied your XML literal example verbatim, but added a ConverterParameter and instead of the source value being a property, it was a whole collection with the ConverterParameter used as a key to pick an item in the collection. Sort of like LINQifying David Anson's IValueConverter SwissArmyKnife PropertyViewer.Anonymous
July 18, 2008
Scott, I am not sure your code here is 100% correct. You show how to dynamically construct XAML using a CLR StringBuilder and then pass that into XamlReader.Load(string). Do XML fragments have to be fully-qualified using <?Mapping XmlNamespace="blah" ClrNamespace="clr-blah-app" Assembly="blah-assembly" ?> ? I keep getting ManagedRuntime 4004 exceptions when I try to use your approach above.Anonymous
July 21, 2008
(以下内容全部整理自博客堂Scottgu博客中文版)Silverlight技巧,诀窍,教程和链接 【原文地址】SilverlightTips,Tricks,...Anonymous
September 17, 2008
The columns part of this is real handy. For the resources method, it would be helpful to me for the example to include the following:
- reference necessary for dateconverter (or class def), can't seem to find this in my project.
- xmlns definition required
- example of locating this resource template outside the control.xaml (which seems to be the most likely usage, yes?)
Anonymous
September 30, 2008
is possible to add a listbox ?Anonymous
October 14, 2008
As you might have heard , we just released Silverlight 2 , and with it the first version of the SilverlightAnonymous
October 17, 2008
I have a simple datagrid and I want to align one column to the right. Is there a way to do this dynamically.Anonymous
November 03, 2008
How can I bind a two-dimensional object? So I don't know in advance how many columns there are. Each columns contains a set of values. The itemSource of my datagrid is the collection of columns, but what is then the binding of my value in the columns? Column1 Column2 ... Item 1 0 6 Item 2 1 8 Item 3 5 0 ...Anonymous
December 02, 2008
To display a cell having multiple columns at runtime i would like to have a datagridcolumn on cell click or a datagridcomboboxcolumn which can display multiple columns at runtimeAnonymous
February 21, 2009
How to add event handler using XamlReader.Load method ? Code below causes exception AG_E_PARSER_BAD_PROPERTY_VALUE I tried to move AddToCart_Click method to Page class but problem persists. Or is it possible to set click event handler in code ? Andrus. Page.xaml: <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="DataGridDynamicColClickHandler.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation"">http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"">http://schemas.microsoft.com/winfx/2006/xaml" xmlns:myGrid="clr-namespace:DataGridDynamicColClickHandler" > <Grid x:Name="LayoutRoot" Background="White"> <myGrid:DataGridBase x:Name="InventoryList"></myGrid:DataGridBase > </Grid> </UserControl> Page.xaml.cs: using System.Windows; using System.Windows.Controls; using System.Windows.Markup; namespace DataGridDynamicColClickHandler { public partial class Page : UserControl { public Page() { InitializeComponent(); InventoryList.Create(); } } public class Product { public string Name { get; set; } } public class DataGridBase : DataGrid { public void Create() { ItemsSource = new Product[] { new Product { Name = "Apple" }}; DataGridTemplateColumn xtemplateColumn = new DataGridTemplateColumn(); xtemplateColumn.CellTemplate = XamlReader.Load(string.Format(@"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:myGrid=""clr-namespace:DataGridDynamicColClickHandler"" > <Button Click=""AddToCart_Click"" /> </DataTemplate>" )) as DataTemplate; Columns.Add(xtemplateColumn); } public void AddToCart_Click(object sender, RoutedEventArgs e) { } } }Anonymous
March 06, 2009
Hi Scott, any idea how I can get a frozen column on the right hand side of the grid?Anonymous
March 10, 2009
Hi, when i use the below XAML to create the DataTemplates as resources to support the code for this method. <UserControl.Resources> <local:DateTimeConverter x:Key="DateConverter" /> <DataTemplate x:Key="myCellTemplate"> <TextBlock Text="{Binding Birthday, Converter={StaticResource DateConverter}}" Margin="4"/> </DataTemplate> Blend close in same time !!!!! just paste de follow xaml : Converter={StaticResource DateConverter}}" Makes the Blend close , a messageBox show a internal error . please help!!! sorry my bad inglish! ThanksAnonymous
March 11, 2009
Has anyone added a summary /totals to a templated data grid (other than devexpress) ... or to a plain grid? Did you use grid/cell events to trigger recalculation once changes were made to the underlying observable collection?Anonymous
March 25, 2009
Good post. Very helpful. It's working for me the way you've explained it. I'm creating dynamic data columns just fine. My problem is when I want to handle the click event or text changed event of one of my columns. If I use a static column template, the event will fire. If I use a dynamic template, I get a parse error identifying the Click="MyClickEventHandler" section of code. Ideas?Anonymous
April 06, 2009
Hi Scott; How can some access control in datagrid ?Anonymous
June 16, 2009
I'm using Silverlight 2.0 and trying the XamlReader Method. I'm doing a basic sample with just one column, added stackpanel to the page and a datagrid with name TestGrid to the panel. My project's name is DBGridTest, the class' name is the default (Page). I changed your code and instead of YourNamespace putted "DBGridTest" which is the namespace for my project and instead of YourAssembly putted "DBGridTest.Page". I have a class with Birthday property of DateTime type, just that property for now. I create a generic List of theis class and add 5 elements to it. Then in the Page constructor after InitializeComponent() y put the following: TestGrid.Columns.Add(templateColumn); TestGrid.AutoGenerateColumns = false; TestGrid.ItemsSource = employeelist; When I set the Datagrid height small so that only the headers are shown it runs ok. But if I change the height so that the column's content will would be shown the iexplore.exe throws and exception 5828. when instead of adding the columns I set AutoGenerateColumns = true; it all runs ok. Am I missing a property on the DataGrid or something else?Anonymous
July 19, 2009
Thanks for the great post. I've referred to it several times :)Anonymous
January 19, 2010
hi, the post is very helpful. i want to know How to add event handler using XamlReader.Load method ?.Please let me know . this is very urgent for me ThanksAnonymous
January 20, 2010
Hi Parimaladevi, This thread should help you do what you are trying to do: http://forums.silverlight.net/forums/t/102290.aspx Hope this helps. -ScottAnonymous
April 19, 2010
Hi Scott, I am trying to add data in the last row of a datagrid. When the user clicks the add button, I want to show textbox in the last row of the grid so that the user can enter information in it and Upon saving I am using ADo .NET Data services. I save using the savechanges.batch options. Can you please help me to show how to add a dynamic textbox in last column of the grid.Anonymous
June 03, 2010
this is very nice explaination,this very help full when go with dynamic tamplate thank you it very help fuul to meAnonymous
January 26, 2011
Great ArticalAnonymous
February 07, 2011
thank you verymuch. it helps me a lot.Anonymous
February 08, 2011
Awesome article!!! Thanks.Anonymous
May 29, 2011
I have been using the RIA Services Silverlight 4 wizard to manipulate my data... Is the MVVM methodology better?Anonymous
June 05, 2011
Hey Scott! I'm trying to add columns dynamically as you have outlined but for some reason I don't get to see the column headers or the columns themselves! The DataGrid is set to AutoGenerateColumns to false and I'm creating my columns in the constructor. The PagedCollectionView I pass to the grid, from my list, shows the columns when AutoGenerateColumns is true or when the columns are defined in the XAML, does that mean I have to set the columns in an specific stage of creation of the grid? I'm using SIlverlight 4. Please help me, I've been stuck in this for a few days now. Thanks in advanced!Anonymous
June 06, 2011
WaterDamageRestoration, It depends what you want out of your project. RIA Services is great at getting a project up and running quckly while still giving it room to scale. MVVM is all about future compatibility. If you think that you are likely to change the view, or have multiple views, then MVVM might be worth the investment. Also, they aren't mutually exclusive as MVVM was taken into consideration when RIA services was being designed. humble.apprentice Without seeing the code, not sure exactly what is going wrong. Just be sure that you are adding the columns to the correct DataGrid: targetDataGrid.Columns.Add(checkBoxColumn); And that the DataGrid has been added to the visual tree: LayoutRoot.Children.Add(targetDataGrid); Hope this helps! -ScottAnonymous
June 06, 2011
Hey Scott! Thanks for the reply! I have posted my question here: forums.silverlight.net/.../230813.aspx. The grid.Columns.Add method is called inside a foreach passing the CreateTemplateForGrid method. My grid is actually in the XAML of the MainPage, it isn't being added at runtime. Let me know if I can give you more information. Thanks again!Anonymous
August 22, 2012
The comment has been removed