none
Заголовок datagrid в WPF RRS feed

Ответы

  • в принцепе возможно для этого надо переопределить стиль для заголовка и для данных например вот так (не как у вас но что бы понять принцип)

    <GridViewDataColumn IsReadOnly="True">
                            <GridViewDataColumn.Header>
                                <Grid Height="250">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="40" />
                                        <ColumnDefinition Width="40"/>
                                        <ColumnDefinition Width="240" />
                                        <ColumnDefinition Width="60" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="90" />
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <TextBlock Grid.ColumnSpan="4" Grid.Row="0" Grid.Column="0" Text="text1" />
                                    <TextBlock Grid.Row="1" Grid.Column="0" Text="text2">
    </TextBlock>
                                    <TextBlock  Grid.Row="1" Text="text3" Grid.ColumnSpan="2" >
                                	</TextBlock>
                                    
                                </Grid>
                            </GridViewDataColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <Grid Height="Background="Transparent">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="40" />
                                            <ColumnDefinition Width="40"/>
                                            <ColumnDefinition Width="240" />
                                            <ColumnDefinition Width="60" />
                                        </Grid.ColumnDefinitions>
                                            <DataGrid Grid.Row="0" RowBackground="Transparent" Background="Transparent" HeadersVisibility="None" Grid.ColumnSpan="3" ItemsSource="{Binding}" AutoGenerateColumns="False" IsReadOnly="True" IsEnabled="False">
                                                <DataGrid.Columns>
                                                    <DataGridTemplateColumn Width="39">
                                                        <DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }" Margin="1,1,1,1" />
                                                            </DataTemplate>
                                                        </sdk:DataGridTemplateColumn.CellTemplate>
    
                                                    </sdk:DataGridTemplateColumn>
                                                    <sdk:DataGridTemplateColumn Width="39" >
                                                        <sdk:DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }" />
                                                            </DataTemplate>
                                                        </sdk:DataGridTemplateColumn.CellTemplate>
                                                    </sdk:DataGridTemplateColumn>
                                                    <sdk:DataGridTemplateColumn Width="139" >
                                                        <sdk:DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }"  />
                                                            </DataTemplate>
                                                        </DataGridTemplateColumn.CellTemplate>
                                                    </DataGridTemplateColumn>
                                                </DataGrid.Columns>
                                            </DataGrid>
                                            <TextBlock Grid.Row="0" Grid.Column="3" Text="{Binding}"/>
                                       
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
    
                        </GridViewDataColumn>

    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 5:49
    • Снята пометка об ответе EvgenOrel 24 августа 2012 г. 6:41
    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 7:31
    24 августа 2012 г. 5:29
  • К сожалению так не получится, идет определение колонки header1 и уже внутри него определяется как будет представлятся информация, поэтому и динамически переставлять подколонки динамически нельзя

    что бы ширина менялась динамически надо сделать привязку Grid.Width к ширине родительского компонента, в данном случае это ширина колонки  что то в этом стиле Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=GridViewCell}, Path=ActualHeight}"

    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 9:29
    24 августа 2012 г. 9:04

Все ответы

  • в принцепе возможно для этого надо переопределить стиль для заголовка и для данных например вот так (не как у вас но что бы понять принцип)

    <GridViewDataColumn IsReadOnly="True">
                            <GridViewDataColumn.Header>
                                <Grid Height="250">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="40" />
                                        <ColumnDefinition Width="40"/>
                                        <ColumnDefinition Width="240" />
                                        <ColumnDefinition Width="60" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="90" />
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <TextBlock Grid.ColumnSpan="4" Grid.Row="0" Grid.Column="0" Text="text1" />
                                    <TextBlock Grid.Row="1" Grid.Column="0" Text="text2">
    </TextBlock>
                                    <TextBlock  Grid.Row="1" Text="text3" Grid.ColumnSpan="2" >
                                	</TextBlock>
                                    
                                </Grid>
                            </GridViewDataColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <Grid Height="Background="Transparent">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="40" />
                                            <ColumnDefinition Width="40"/>
                                            <ColumnDefinition Width="240" />
                                            <ColumnDefinition Width="60" />
                                        </Grid.ColumnDefinitions>
                                            <DataGrid Grid.Row="0" RowBackground="Transparent" Background="Transparent" HeadersVisibility="None" Grid.ColumnSpan="3" ItemsSource="{Binding}" AutoGenerateColumns="False" IsReadOnly="True" IsEnabled="False">
                                                <DataGrid.Columns>
                                                    <DataGridTemplateColumn Width="39">
                                                        <DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }" Margin="1,1,1,1" />
                                                            </DataTemplate>
                                                        </sdk:DataGridTemplateColumn.CellTemplate>
    
                                                    </sdk:DataGridTemplateColumn>
                                                    <sdk:DataGridTemplateColumn Width="39" >
                                                        <sdk:DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }" />
                                                            </DataTemplate>
                                                        </sdk:DataGridTemplateColumn.CellTemplate>
                                                    </sdk:DataGridTemplateColumn>
                                                    <sdk:DataGridTemplateColumn Width="139" >
                                                        <sdk:DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding }"  />
                                                            </DataTemplate>
                                                        </DataGridTemplateColumn.CellTemplate>
                                                    </DataGridTemplateColumn>
                                                </DataGrid.Columns>
                                            </DataGrid>
                                            <TextBlock Grid.Row="0" Grid.Column="3" Text="{Binding}"/>
                                       
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
    
                        </GridViewDataColumn>

    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 5:49
    • Снята пометка об ответе EvgenOrel 24 августа 2012 г. 6:41
    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 7:31
    24 августа 2012 г. 5:29
  • Прорисовывается действительно так как задумывалось, но вопросы остались :

    1. Почему тo TextBlock в строках имеет разную ширину?

    2. Как сделать возможным изменение ширины столбца, например, Column4?

    3. Как задать изменение размеров вложенного в заголовок столбца Grid при изменении ширины столбца?

    <Window x:Class="Lab.wDataInput"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="wDataInput" Height="600" Width="800">
    <Window.Resources>
            <XmlDataProvider x:Key="Info">
            <x:XData>
                <Data xmlns="">
                    <Set>
                        <Date>
                            <sys:DateTime>01.01.1900</sys:DateTime>
                        </Date>
                        <Name>"Проба1"</Name>
                        <FIO>Иванов И.И</FIO>
                        <input_conc>0.05</input_conc>
                        <conc_martix_x1>0.053</conc_martix_x1>
                        <conc_martix_x2>0.056</conc_martix_x2>
                        <conc_proba_x1>0.05</conc_proba_x1>
                        <conc_proba_x2>0.051</conc_proba_x2>
                        <conc_find_x1>0</conc_find_x1>
                        <conc_find_x2>0</conc_find_x2>
                    </Set>
                    <Set>
                        <Date>
                            <sys:DateTime>02.01.1900</sys:DateTime>
                        </Date>
                        <Name>"Проба2"</Name>
                        <FIO>Пертов И.И</FIO>
                        <input_conc>0.04</input_conc>
                        <conc_martix_x1>0.041</conc_martix_x1>
                        <conc_martix_x2>0.039</conc_martix_x2>
                        <conc_proba_x1>0.042</conc_proba_x1>
                        <conc_proba_x2>0.039</conc_proba_x2>
                        <conc_find_x1>0.04</conc_find_x1>
                        <conc_find_x2>0.045</conc_find_x2>
                        </Set>
                </Data>
            </x:XData>
        </XmlDataProvider>
            <Style x:Key="labAngle90" TargetType="{x:Type Label}">
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <RotateTransform CenterX="0" CenterY="0" Angle="90" />
                    </Setter.Value>
                </Setter>
            </Style>
            <DataTemplate x:Key="dgHeadTpl">
                    <Border Background="LightBlue" BorderBrush="Black" BorderThickness="1" Margin="0,0,0,0" >
                        <TextBlock Text="{Binding}" HorizontalAlignment="Center" />
                    </Border>
            </DataTemplate>
        </Window.Resources>
    
    <Grid x:Name="LayoutRoot">
            <DataGrid AutoGenerateColumns="False"  ItemsSource="{Binding  Source={StaticResource Info}, XPath=/Data/Set}">
                
                <DataGrid.Columns>
                    
                    <DataGridTemplateColumn Header="Дата" HeaderTemplate="{StaticResource dgHeadTpl}">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding XPath=Date}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn Header="Наименование">
                    
                    
                    <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding XPath=Name}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn >
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock>
                               ФИО <LineBreak/> Исполнителя
                                </TextBlock>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding XPath=FIO}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    
                    
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <Grid ShowGridLines="False">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="30*"/>
                                        <RowDefinition Height="30*"/>
                                        <RowDefinition Height="30*"/>
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="50*"/>
                                        <ColumnDefinition Width="90*"/>
                                        <ColumnDefinition Width="90*"/>
                                        <ColumnDefinition Width="90*"/>
                                        <ColumnDefinition Width="90*"/>
                                        <ColumnDefinition Width="90*"/>
                                        <ColumnDefinition Width="90*"/>
                                    </Grid.ColumnDefinitions>
                                    <Label Grid.ColumnSpan="7" Content="Концентрация(мг/дм3)" HorizontalAlignment="Center" />
                                    <Label Grid.Row="1" Content="Введенная" Grid.RowSpan="2" HorizontalAlignment="Center" Style="{StaticResource labAngle90}"/>
                                    <Label Grid.Row="1" Grid.Column="1" Content="Матрица" Grid.ColumnSpan="2" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="1" Grid.Column="3" Content="Проба" Grid.ColumnSpan="2" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="1" Grid.Column="5" Content="Найденная" Grid.ColumnSpan="2" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="1" Content="X1" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="2" Content="X2" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="3" Content="X1" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="4" Content="X2" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="5" Content="X1" HorizontalAlignment="Center"/>
                                    <Label Grid.Row="2" Grid.Column="6" Content="X2" HorizontalAlignment="Center"/>
                                    
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBox Text="{Binding XPath=input_conc}"/>
                                    <TextBox Grid.Column="1" Text="{Binding XPath=conc_martix_x1}"/>
                                    <TextBox Grid.Column="2" Text="{Binding XPath=conc_martix_x2}"/>
                                    <TextBox Grid.Column="3" Text="{Binding XPath=conc_proba_x1}"/>
                                    <TextBox Grid.Column="4" Text="{Binding XPath=conc_proba_x2}"/>
                                    <TextBox Grid.Column="5" Text="{Binding XPath=conc_find_x1}"/>
                                    <TextBox Grid.Column="6" Text="{Binding XPath=conc_find_x2}"/>
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

    И кстати, как задать границы ячеек в заголовке?

    • Изменено EvgenOrel 24 августа 2012 г. 6:58
    24 августа 2012 г. 6:52
  • Границы задают с помощью бордера либо можно у грида задать свойство ShowGridLines

    По ширине
    ColumnDefenition в Cell и Header template должны быть одинаковые тогда и данные будут отображаться одинаково у вас они разные соответственно и не совпадает ширина в шапке и ширина в ячейке

    Про изменение ширины попробуйте

    CanUserResizeColumns



    • Изменено Brash_O 24 августа 2012 г. 7:33
    24 августа 2012 г. 7:16
  • Про изменение ширины попробуйте

    CanUserResizeColumns

    не, немного не то. У меня основная заморочка с заголовком .Я просто неправильно сформулировал вопрос - нужно  чтобы при изменении 3-го столбца(На рисунке Header1) , увеличивался весь вложенный грид - то есть ширина всех вложенных  столбцов менялась, а так же была возможность изменить размер н-р Column 4 "перетаскиванием" ее границы в заголовке. То есть нужно описать датагрид таким образом чтобы каждый столбец в Header1 и Header2  "вел" себя как столбец в обычном датагриде, только разумеется в пределах этого объединенного столбца, например ,с возможностью поменять местами (свойство CanUserReorderColumns) Column3 и Header2 в пределах столбца Header1 или поменять Column4  и Column 5 в пределах Header2

    24 августа 2012 г. 8:21
  • К сожалению так не получится, идет определение колонки header1 и уже внутри него определяется как будет представлятся информация, поэтому и динамически переставлять подколонки динамически нельзя

    что бы ширина менялась динамически надо сделать привязку Grid.Width к ширине родительского компонента, в данном случае это ширина колонки  что то в этом стиле Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=GridViewCell}, Path=ActualHeight}"

    • Помечено в качестве ответа EvgenOrel 24 августа 2012 г. 9:29
    24 августа 2012 г. 9:04