WPF - 只有DataGridColumn中的特定单元格具有CheckBox ...是否可能?

时间:2013-02-08 16:02:36

标签: wpf datagrid checkbox datagridcolumn datagridcell

我的客户要求我们提供一个包含DataGrid的表单,该表单是从数据库中的实际数据的角度出发的。

以下是我的数据库的(简化)外观。

│id|stuff│flag│column│column│column│
------------------------------------
│35| AAA │  0 │ etc. │ blah │ yadda│ 
│58│ BBB │  1 │ etc. │ blah │ yadda│  
│78│ CCC │  0 │ etc. │ blah │ yadda│

以下是我要求创建的内容。

│HEADER│CODE│DATA1│DATA2│DATA3│
-------------------------------
│ID    | #1 │   35│  58│  78│
│STUFF │ #2 │  AAA│  BBB│ CCC│
│FLAG  │ #3 │    0│  1│   0│
│COLUMN│ #4 │ etc.│ etc.│ etc.│
│COLUMN│ #5 │ blah│ blah│ blah│
│COLUMN│ #6 │yadda│yadda│yadda│

标志列应该是0或1,所以我希望该列为DataGridCheckBoxColumn,但是它是旋转的!当然,我可以(轻松地)让单元格在验证过程中只接受1或0,但是,我仍然想知道我是否可以使列中的指定单元格具有CheckBox。< / p>

2 个答案:

答案 0 :(得分:3)

可以使用DataGridTemplateColumn并根据您的DataContext调整CellTemplate

答案 1 :(得分:1)

我会看一下this WPF horizontal Datagrid answer利用<RotateTransform Angle="-90"/>来展开你的DataGrid。


以下是复制的XAML答案@dimaKudr

<DataGrid.LayoutTransform>
    <TransformGroup>
        <RotateTransform Angle="-90"/>
        <ScaleTransform ScaleX="1" ScaleY="-1" />
    </TransformGroup>
</DataGrid.LayoutTransform>

<DataGrid.ColumnHeaderStyle>
    <Style TargetType="{x:Type DataGridColumnHeader}"
           BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
        <Setter Property="LayoutTransform">
            <Setter.Value>
                <TransformGroup>
                    <RotateTransform Angle="-90"/>
                    <ScaleTransform ScaleX="1" ScaleY="-1" />
                </TransformGroup>
            </Setter.Value>
        </Setter>
    </Style>
</DataGrid.ColumnHeaderStyle>

之后,我会看一下创建一个DataGridTemplateColumn并使用CellTemplateCheckBox内部绑定到您的Flag属性,使用转换器转换0和1为真/假

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn x:Name="FlagColumn" Header="Flag" Width="25" IsReadOnly="False">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                        <CheckBox IsChecked="{Binding Flag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource FlagConverter}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>