Search code examples
wpfinfragisticsxamdatagridrowdetails

Implementing row details with XamDataGrid


Right now i am trying to implement something like the RowDetails feature of the WPF DataGrid into the XamDataGrid. What i have tried to do (and failed until now):

1.) Replace ExpandableFieldRecordPresenterStyle

In the FieldSettings i replace the ExpandableFieldRecordPresenterStyle with my own Style This style is sitting in the window resources and sets the Template / TemplateGridView (tried both) properties to my own DataTemplate / ControlTemplate (tried both).

This did not work, although the style was set i did not see any changes in the visual represantion.

2.) Replace the DataRecordPresenterStyle

In the FieldLayoutSettings i replace the DataRecordPresenterStyle with my own style. This does the same as the previous method and it works. However, now i have got to re-implement the original DataPresenterStyle, since i just want to add the row details control, but leave the rest unchanged. This is where i am stuck right now.

In both variants my style and template are pretty simple:

<ControlTemplate x:Key="NestedRecordTemplate">
    <TextBlock Text="test"/>
</ControlTemplate>

<Style x:Key="NestedRecordStyle" TargetType="{x:Type igDP:DataRecordPresenter}">
    <Setter Property="Template" Value="{StaticResource NestedRecordTemplate}" />
</Style>

I have researched the infragstics forums (there has been suggestions to go with the second option) and the internet and have not found a solution yet.


Solution

  • There is an example in this thread that could be used as an example on how to accomplish this: http://community.infragistics.com/forums/p/43348/238054.aspx

    Note that the sample Alex provided in the thread uses a bound field for the row details and if you don't have a field to bind to, you can use an UnboundField instead. The following shows an example of what this might look like:

    <igDP:XamDataGrid x:Name="XamDataGrid1">
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <igDP:FieldLayout.Settings>
                    <igDP:FieldLayoutSettings AutoArrangeCells="Never"/>
                </igDP:FieldLayout.Settings>
                <igDP:FieldLayout.Fields>
                    <igDP:Field Name="EmployeeID" Row="0" Column="0"/>
                    <igDP:Field Name="Name" Row="0" Column="1"/>
                    <igDP:Field Name="OnSite" Row="0" Column="2"/>
                    <igDP:Field Name="DateOfHire" Row="0" Column="3"/>
                    <igDP:Field Name="Department" Row="0" Column="4"/>
                    <igDP:Field Name="Site" Row="0" Column="5"/>
                    <igDP:UnboundField Name="RowDetails" Row="1" Column="0" ColumnSpan="6">
                        <igDP:UnboundField.Settings>
                            <igDP:FieldSettings>
                                <igDP:FieldSettings.LabelPresenterStyle>
                                    <Style TargetType="{x:Type igDP:LabelPresenter}">
                                        <Setter Property="Visibility" Value="Collapsed"/>
                                    </Style>
                                </igDP:FieldSettings.LabelPresenterStyle>
                                <igDP:FieldSettings.CellValuePresenterStyle>
                                    <Style TargetType="{x:Type igDP:CellValuePresenter}">
                                        <Setter Property="Template">
                                            <Setter.Value>
                                                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                                                    <StackPanel Orientation="Horizontal">
                                                        <TextBlock Text="Row Details for "/>
                                                        <TextBlock Text="{Binding DataItem.Name}"/>
                                                    </StackPanel>
                                                    <ControlTemplate.Triggers>
                                                        <DataTrigger Binding="{Binding IsSelected}" Value="False">
                                                            <Setter Property="Visibility" Value="Collapsed" />
                                                        </DataTrigger>
                                                        <DataTrigger Binding="{Binding IsSelected}" Value="True">
                                                            <Setter Property="Visibility" Value="Visible" />
                                                        </DataTrigger>
                                                    </ControlTemplate.Triggers>
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </Style>
                                </igDP:FieldSettings.CellValuePresenterStyle>
                            </igDP:FieldSettings>
                        </igDP:UnboundField.Settings>
                    </igDP:UnboundField>
                </igDP:FieldLayout.Fields>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>