Hi,
I saw this Xaml code in this forum:
<igGrid:XamWebGrid Name="xamWebGrid1"> <igGrid:XamWebGrid.Columns> <igGrid:TextColumn Key="Value1"> <igGrid:TextColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="1Some looooong text that should be split in multiline " TextWrapping="Wrap" Width="120"/> </DataTemplate> </igGrid:TextColumn.HeaderTemplate> </igGrid:TextColumn> <igGrid:TextColumn Key="SomeLongPropertyNameThatWillBeWrappedInTheGridHeader"> <igGrid:TextColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding}" TextWrapping="Wrap" Width="120"/> </DataTemplate> </igGrid:TextColumn.HeaderTemplate> </igGrid:TextColumn>
</igGrid:XamWebGrid.Columns> </igGrid:XamWebGrid>
I would like to convert to C# but I don't know how I can add/insert a datatemplate to hold the textblock.
xamWebGrid1.Columns.Add(new TextColumn() { Key = "Value1", HeaderText = "SomeLongPropertyNameThatWillBeWrappedInTheGridHeader", Width = new ColumnWidth(85, false), IsReadOnly = false, });
Can anyone help? Thanks!
Hi tangolp,
You can set the HeaderTemplate for the TextColumn by using HeaderTemplate property of the TextColumn. So the code should look something like this:
amWebGrid1.Columns.Add(new TextColumn() { Key = "Value1", HeaderText = "SomeLongPropertyNameThatWillBeWrappedInTheGridHeader", Width = new ColumnWidth(85, false), IsReadOnly = false, HeaderTemplate = YourDataTemplate });
For the data template you have few options:
HTH
Thanks for your reply Konstantin. I found this code in one of your links you have provided me:
private DataTemplate Create(Type type) { DataTemplate dt = new DataTemplate(); string xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/client/2007"" xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @"""> <controls:" + type.Name + @"/></DataTemplate>"; return (DataTemplate)XamlReader.Load(xaml); }
If I like to create a Textblock, how/what do I need to pass to the Create function?
The idea behind this code is that XamlReader.Load(string YourXamlCode) will parse the string you provide into run time object. XamlReader returns object and you need to cast that object to whatever you are trying to parse. In your case that is TextBlock. So basically your code should look something like this:
string path = "YourObject.Name" //this is example
string xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> <TextBlock Text=""{Binding " + path + ", @"}""/> </DataTemplate>"; DataTemplate dt = (DataTemplate)XamlReader.Load(xaml);
I'm not sure what are you trying to achieve , could you describe your scenario in more detail ?
It'll be nice if you could illustrate what you want your grid to look like (for example, with a screenshot or a quick sketch) as well as your data object model.
As I'm not quite sure what you're trying to achieve, it's hard to tell you what's the best way to achieve it.
Regards,
You told to bind the TextBlock text to column's key . I dont want to bind the Column's key instead I want to bind someother property of the Grid ItemsSource underlying object. Why because now in the Converter class i am just getting the TextColumn key value as TextBlock text, instead i want to get the full Object, say my I have object called Emplyee and it has property ID, Name and Description. Now TextColumn key value I am passing as ID of the Emplyee class. But in converter class i want to access the Name property. Is this possible ?
Its really great to get response so quickly. Thank you so much for the solution, This works fine.
Thank You
One possible way to achieve this is to use a converter and modify the HeaderText to fit your needs in the Convert method. Attached is an updated sample that shows this.
Hope this helps,
Thank you for your kind response. What you said is right. But the problem is I am creating the TextColumn from codebehind and Loading the Grid. I dont want to display the keyname as HeaderText. I want to specify a customized text as HeaderText. Why because my key may contain underscore so I want to change the Text, Is it possible If I give a TextColumn HeaderText then this datatemplate TextBlock text should take the TextColumn HeaderText.