Welcome to the Xceed Community | Help
Community Search  
More Search Options

How I binding two Linq columns in one in Datagrid with using DataTemplate

Sort Posts: Previous Next
  •  07-03-2009, 5:32 AM Post no. 22244

    How I binding two Linq columns in one in Datagrid with using DataTemplate

    I have LINQ table:

    | Name | ValueMin | ValueMax |
    --------------------------------
    | sugar  |        10     |      50       |


    At result in datagrid I have:

    | Name | Value |
    ----------------
    | sugar | 10-50 |


    I hide the column ValueMin. For column ValueMax used DataTemplate:

    <xcdg:Column FieldName="ValueMin" Visible="False"/>
    <xcdg:Column FieldName="ValueMax" Title="Value">
      <xcdg:Column.CellContentTemplate>
      <DataTemplate>
      <StackPanel>
      <Grid>
      <Grid.ColumnDefinitions>
      <ColumnDefinition MinWidth="30"/>
      <ColumnDefinition Width="5"/>
      <ColumnDefinition MinWidth="30"/>
      </Grid.ColumnDefinitions>
      <TextBlock Grid.Column="0" Text="{Binding Path=ValueMin}" TextAlignment="Right" />
      <TextBlock Grid.Column="1" Text="-"/>
      <TextBlock Grid.Column="2" Text="{Binding}"/>
      </Grid>
      </StackPanel>
      </DataTemplate>
      </xcdg:Column.CellContentTemplate>
    </xcdg:Column>


    Binding to ValueMin not works(. What wrong? 

  •  07-03-2009, 6:29 AM Post no. 22246 in reply to 22244

    Re: How I binding two Linq columns in one in Datagrid with using DataTemplate

    When <TextBlock Grid.Column="2" Text="{Binding}"/> already returns the value of ValueMax (like a virtual {Binding Path=ValueMax}) then your current {Binding Path=ValueMin} in reality will result in {Binding Path=ValueMax.ValueMin}.

    So far the problem. My current solution to such thing would be a custom DataGridItemProperty inside a DataGridCollectionViewSource (to which the DataGridControl would be bound to) with a ValuePath="." :

     <xcdg:DataGridItemProperty Name="ValueMinMax" ValuePath="." DataType="model:YourEntityType" CalculateDistinctValues="False"
                                IsReadOnly="True" MaxDistinctValues="0" Title="Value" />

    Then you could use:

    <xcdg:Column FieldName="ValueMinMax">
      <xcdg:Column.CellContentTemplate>
      <DataTemplate>
      <StackPanel>
      <Grid>
      <Grid.ColumnDefinitions>
      <ColumnDefinition MinWidth="30"/>
      <ColumnDefinition Width="5"/>
      <ColumnDefinition MinWidth="30"/>
      </Grid.ColumnDefinitions>
      <TextBlock Grid.Column="0" Text="{Binding Path=ValueMin}" TextAlignment="Right" />
      <TextBlock Grid.Column="1" Text="-"/>
      <TextBlock Grid.Column="2" Text="{Binding Path=ValueMax}"/>
      </Grid>
      </StackPanel>
      </DataTemplate>
      </xcdg:Column.CellContentTemplate>
    </xcdg:Column>

     

    But I really would like to see an official comment about this (whether its bad or will cause side effects -- or if there is a more native solution for this).


    /\/\arkus.
  •  07-03-2009, 7:54 AM Post no. 22247 in reply to 22246

    Re: How I binding two Linq columns in one in Datagrid with using DataTemplate

    Thanks Markus!

    Your solution works great!

  •  07-03-2009, 7:56 AM Post no. 22249 in reply to 22246

    Re: How I binding two Linq columns in one in Datagrid with using DataTemplate

    This is also the approach that I would use. Smile
    Senior Technical Writer
    - Xceed Software

    In three words I can sum up everything I've learned about life: it goes on.
View as RSS news feed in XML
Contact | Site Map | Reviews | Legal Terms of Use | Trademarks | Privacy Statement Copyright 2011 Xceed Software Inc.