Flexgrid column header with binding

Posted by: kisar on 14 June 2018, 7:47 pm EST

    • Post Options:
    • Link

    Posted 14 June 2018, 7:47 pm EST

    Hi

    I need to set the flexgrid column header through binding,

    Is it possible somehow?

    Thanks

  • Posted 17 June 2018, 8:13 pm EST

    Hi,

    For binding Column Header in C1FlexGrid, please use following code snippet:

    <c1:C1FlexGrid.Columns>
       <c1:Column IsReadOnly="False">
           <c1:Column.HeaderTemplate>
                  <DataTemplate>
                     [b] <TextBlock Text="{Binding Source={x:Reference textBox}, Path= Text}"/>[/b]
                   </DataTemplate>
               </c1:Column.HeaderTemplate>
          </c1:Column>
    </c1:C1FlexGrid.Columns>
    ```Also, attached is sample application for your reference.
    Thanks,
    Ruchir 
    [zip filename="BindColumnHeaderWPF.zip"]https://gccontent.blob.core.windows.net/forum-uploads/file-6672e342-cc46-450e-9dc1-a2ce43a40a17.zip[/zip]
  • Posted 18 June 2018, 7:24 pm EST

    Hi, thanks for the answer

    but i would like to ask you id ther’s a more compact manner to have this result,

    because the grid must be used ery often in the project.

    With your solution i need to write and customize too much for every grid, It would be very efficient to have one solution like this:

    c1:C1FlexGrid.Columns

    <c1:Column Header=“Binding {kbinding_language.kgrid_col_id}” Width=“60” Binding=“{Binding krecord_base.kid}”/>

    <c1:Column Header=“Binding {kbinding_language.kgrid_col_companyname}” Width=“3*” Binding=“{Binding krecord_base.kname}”/>

    </c1:C1FlexGrid.Columns>

    I tried also to make i my flexgrid : MY_column_wpf : C1.WPF.FlexGrid.Column

    and add there a DependencyProperty but it is not possible because C1.WPF.FlexGrid.Column is not a DependencyObject

    Do you have more ideas for me?

    Thanx

  • Posted 19 June 2018, 5:24 pm EST

    Hi,

    To bind the column header, you have to manually place a TextBlock in HeaderTemplate and then bind it’s Text to any property.```

              <c1:C1FlexGrid.Columns>
                <c1:Column Binding="{Binding ID, Mode=TwoWay}">
                     <c1:Column.HeaderTemplate>
                        <DataTemplate>
                            [b]<TextBlock Text="{Binding ColId}"/>[/b]
                        </DataTemplate>
                    </c1:Column.HeaderTemplate>
                </c1:Column>
                <c1:Column Binding="{Binding FName}">
                    <c1:Column.HeaderTemplate>
                        <DataTemplate>
                          [b]  <TextBlock Text="{Binding ColName}"/>[/b]
                        </DataTemplate>
                    </c1:Column.HeaderTemplate>
                </c1:Column>
                <c1:Column Binding="{Binding LName}" />
            </c1:C1FlexGrid.Columns>
    
    Thanks,
    Ruchir 
    [img]https://gccontent.blob.core.windows.net/forum-uploads/file-c7552b50-fe1a-41a3-ba88-bdf266c81bdd.png[/img]
    [zip filename="BindColumnHeader.zip"]https://gccontent.blob.core.windows.net/forum-uploads/file-c3d3585a-8872-4392-9328-5f1369c4ddd6.zip[/zip]
  • Posted 19 June 2018, 6:04 pm EST

    Yes, i understood the previous example, this is the same. I was hoping could be possibile have a different more compact solution.

    If, in the future, could be possible to have the Header as DependencyProperty it would be very usefull

    Thanx

  • Posted 19 June 2018, 11:40 pm EST

    Sorry, im using your solution, can you help me to recovery the textblock by codebehind.

    I need to check at runtime the text value of the textblock in the header template.

    Thanx

  • Posted 21 June 2018, 3:52 pm EST

    Hi,

    To access the value of binded column header, you need to take help of CellFactory’s CreateColumnHeaderContent method and inside get the value using BindingExpression, as follows:```

    public override void CreateColumnHeaderContent(C1.WPF.FlexGrid.C1FlexGrid grid, Border bdr, C1.WPF.FlexGrid.CellRange range)

    {

    base.CreateColumnHeaderContent(grid, bdr, range);

            if (grid.Columns[range.Column].DataType == typeof(string) || grid.Columns[range.Column].DataType == typeof(int)) //get columns of specific type or by index etc
            {
                var tb = bdr.Child as TextBlock;
                if(tb.Text!="")
                {
                    Console.WriteLine($"UnBound Column Header text: {tb.Text}");
                }
                if (tb != null)
                {
                    tb.Background = Brushes.Red;
                    BindingExpression xp = tb.GetBindingExpression(TextBlock.TextProperty);
                    if (xp != null)
                    {
                        string bindingPath = xp.ParentBinding.Path.Path;
                        string[] properties = bindingPath.Split('.');
                        object value = _colBinding.GetType().GetProperty(properties.Last<string>()).GetValue(_colBinding);
                        Console.WriteLine($"Binded Column Header text: {value}");
                    }
                }
            }
        }
    
    Thanks,
    Ruchir 
    [zip filename="BindColumnHeaderWPF_Get.zip"]https://gccontent.blob.core.windows.net/forum-uploads/file-22ba9ad8-f66b-4843-a5bc-76b01927f210.zip[/zip]
  • Posted 22 June 2018, 6:21 pm EST

    Hi i cannot open the zip file, can you resend it.

    However my purpose is to find the column from its header text.

    So first i set the column header in binding with your solution, after at runtime i need to know the column with a specific text header.

    Thanx

  • Posted 25 June 2018, 7:31 pm EST

    Hi,

    I have reattached the file for you to test. Also, I tweaked the code a little to show column index,Name containing specific header text.

    Hope it meets your requirement.

    Thanks,

    Ruchir

    BindColumnHeaderWPF1.zip

  • Posted 1 July 2018, 4:57 pm EST

    Thanx

Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels