在DataGrid中展开具有数字范围的单元格

时间:2014-03-28 19:21:30

标签: c# wpf xaml datagrid

我有DataGrid,当有人点击DataGridCell时,我希望值覆盖该单元格。最好的办法是什么? Adornlayer?定制控制?

以下是一个例子。有人点击DataGrid的17.27,我希望旁边的价格范围。然后,用户可以选择一个值并使用新价格设置DataGridCell。一个转折点是值接下来,而不是下拉,或者我只能使用ComboBox

enter image description here

2 个答案:

答案 0 :(得分:2)

在我看来,你将适合这种控制:


enter image description here

对于ComboBox,您可以设置动态范围,并附加到集合中。在DataGrid中,您可以使用DataGridTemplateColumn列自行完成ComboBox:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=CustomObjectStringMember}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>

    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=CustomObjectListMember}"
                      Text="{Binding Path=CustomObjectStringMember}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

或使用DataGridComboBoxColumn

<DataGridComboBoxColumn Header="Current Category"
                        SelectedValueBinding="{Binding Path=CurrentCategory}"
                        SelectedValuePath="CategoryID"
                        DisplayMemberPath="CategoryName"
                        ItemsSource="{Binding Source={StaticResource categoriesDataProvider}}" />

enter image description here

IntegerUpDown提供了一个带有按钮微调器的TextBox,它允许使用微调器按钮递增和递减Nullable值。


尝试Popup使用ListBox,如下所示:

<Popup Name="MyPopUp"
       UseLayoutRounding="True"
       AllowsTransparency="False"
       IsOpen="True"
       Placement="Right">

    <Border Name="BorderContent" 
            UseLayoutRounding="True"
            Width="140"
            BorderThickness="1"
            BorderBrush="Black">

        <StackPanel Background="White">
            <TextBlock Background="White" 
                       Foreground="Black"
                       HorizontalAlignment="Center"
                       Text="MARKET" />

            <Separator Background="Black" Height="2" />

            <ListBox BorderBrush="Transparent">
                <ListBoxItem>17.27</ListBoxItem>
                <ListBoxItem>17.28</ListBoxItem>
                <ListBoxItem>17.29</ListBoxItem>
                <ListBoxItem>17.30</ListBoxItem>
            </ListBox>
        </StackPanel>
    </Border>
</Popup>       

Output

enter image description here

对于Popup,您可以将展示位置设置为 Right ,并为ItemSource使用动态集合。要在DataGrid中显示弹出窗口,您需要将其放在CellEditingTemplate中,如下所示:

<DataGridTemplateColumn Header="Test">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Sample}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>

    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <Grid>
                <TextBox Text="{Binding Path=Sample}" />
                <Popup ... />
            </Grid>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

答案 1 :(得分:0)

我认为Popup可能是最好的。