安心海叶 发表于 2016-11-1 11:21:43

DataGrid的ColumnHeader为Combox

本帖最后由 安心海叶 于 2016-11-1 17:02 编辑

您好!

现在我想将DataGrid的每列列头Header定义为Combox,不知道如何实现?请求帮助

以下我是用C1DataGrid.TopRows实现了两行头,但事实上,需求是:第一行参数为Combox,第二行为相应的单位,当Combox的SelectIndex改变时,当前列的数据也改变。



所以,首先应该是第一行Combox的Style为:像以下图片中Combo定义的单元细胞一样


然后是改变当前列的数据,请求帮助?


dexteryao 发表于 2016-11-1 18:10:20

您好,问题已收到,测试后给您答复。

安心海叶 发表于 2016-11-2 16:38:50

dexteryao 发表于 2016-11-1 18:10
您好,问题已收到,测试后给您答复。

请问有测试结果吗?

Alice 发表于 2016-11-2 17:27:26

设置列的Header是ComboBox,就可以实现将Header改成下拉框的样子。
代码参考:
<c1:C1DataGrid.Columns>
                <c1:DataGridTemplateColumn>
                  <c1:DataGridTemplateColumn.Header>
                        <ComboBox></ComboBox>
                  </c1:DataGridTemplateColumn.Header>
                </c1:DataGridTemplateColumn>
            </c1:C1DataGrid.Columns>

安心海叶 发表于 2016-11-3 09:27:23

Alice 发表于 2016-11-2 17:27
设置列的Header是ComboBox,就可以实现将Header改成下拉框的样子。
代码参考:

不可以的,我做个demo

Alice 发表于 2016-11-3 14:42:12

安心海叶 发表于 2016-11-3 09:27
不可以的,我做个demo

好,请您把demo发过来,我在帮你看看。

安心海叶 发表于 2016-11-3 15:57:40

Alice 发表于 2016-11-3 14:42
好,请您把demo发过来,我在帮你看看。

谢谢回复~
但是这么添加后,是以下的样式



Alice 发表于 2016-11-3 17:39:12

安心海叶 发表于 2016-11-3 15:57
谢谢回复~
但是这么添加后,是以下的样式

这是微软的ComboBox的默认样式。
如果你是期望可编辑的样式,你就把ComboBox的IsEditable属性设置为true。

安心海叶 发表于 2016-11-4 15:57:57

本帖最后由 安心海叶 于 2016-11-4 16:00 编辑

Alice 发表于 2016-11-3 17:39
这是微软的ComboBox的默认样式。
如果你是期望可编辑的样式,你就把ComboBox的IsEditable属性设置为true ...
谢谢你的回复~

因为C1DataGrid的ColumnHeader全为Combox,所以我重新定义了ColumnHeaderStyle,如下:

                <c1:C1DataGrid.ColumnHeaderStyle>
                  <Style TargetType="c1:DataGridColumnHeaderPresenter">
                        <Setter Property="Background" Value="AliceBlue"></Setter>
                        <Setter Property="Template">
                            <Setter.Value>
                              <ControlTemplate>
                                    <StackPanel Orientation="Vertical">
                                        <ComboBox Name="cpetPara"
                                                ItemsSource="{Binding Source={StaticResource ParameterNameData}, Path=ParaProperty}"
                                                DisplayMemberPath = "ParaName"
                                                Style="{StaticResource ComboBoxStyle}"
                                                BorderThickness="0"></ComboBox>
                                        <TextBlock Text="{Binding SelectedItem.ParaUnit, ElementName=cpetPara}" Height="30"/>
                                    </StackPanel>
                              </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                  </Style>
                </c1:C1DataGrid.ColumnHeaderStyle>
那么对于DataGrid的每一列,我该如何设置当前列的SelectIndex?在xmal中能实现吗?
如下:
<c1:DataGridTextColumn Binding="{Binding Time}"/>

Alice 发表于 2016-11-4 18:05:43

安心海叶 发表于 2016-11-4 15:57
谢谢你的回复~

因为C1DataGrid的ColumnHeader全为Combox,所以我重新定义了ColumnHeaderStyle,如下: ...
ComboBox这个是微软的控件,它本身提供了SelectedIndex属性可以设置默认的选择的项目。
我不太理解什么是当前列的SelectIndex?列上没有SelectIndex属性。
页: [1] 2 3
查看完整版本: DataGrid的ColumnHeader为Combox