WPF 数据网格中的组合框 C#

ComboBox in WPF Datagrid c#

我有一个 DataGrid 并用 DataTable 填充它。

dgMitarbeiter.ItemsSource = mainController.loadDataTableMitarbeiter().DefaultView;

这是函数:

public DataTable loadDataTableMitarbeiter() 
{
    loadMitarbeiterList();
    dtMitarbeiter.Clear();
    foreach (Mitarbeiter mitarbeiter in mitarbeiterList)
    {
        drMitarbeiter = dtMitarbeiter.NewRow();
        drMitarbeiter["ID"] = mitarbeiter.ID;
        drMitarbeiter["Vorname"] = mitarbeiter.vorname;
        drMitarbeiter["Nachname"] = mitarbeiter.nachname;
        drMitarbeiter["Kostenstelle"] = mitarbeiter.kostenstelle.id;
        drMitarbeiter["Größe Hose"] = mitarbeiter.gr_hose;
        drMitarbeiter["Größe Oberteil"] = mitarbeiter.gr_oberteil;
        drMitarbeiter["Gröse Schuhe"] = mitarbeiter.gr_schuhe;
        drMitarbeiter["Ferial"] = mitarbeiter.ferial;
        drMitarbeiter["Werk"] = mitarbeiter.werk;
        drMitarbeiter["Datum"] = mitarbeiter.creationDate.ToString("dd.MM.yyyy");
        dtMitarbeiter.Rows.Add(drMitarbeiter);
    }

    return dtMitarbeiter;
}

Xaml:

<DataGrid x:Name="dgMitarbeiter" AlternatingRowBackground="Gainsboro"  AlternationCount="2" ColumnWidth="*" HorizontalAlignment="Left" SelectedItem="{Binding SelectedItem}" Margin="10,22,0,0" VerticalAlignment="Top" Height="357" Width="731" CanUserAddRows="False" CanUserDeleteRows="False" RowEditEnding="dgMitarbeiter_RowEditEnding"  Background="White" HeadersVisibility="Column"/>

我需要一个用于列 "Kostenstelle" 的组合框,但不知道如何实现。有什么想法吗?

您需要在 DataGrid 列中定义 DataGridComboBoxColumn,然后可以将 ItemsSource 绑定到组合框选项所在的位置。

here.

我的回答实现了 ObservableCollection。并将其作为数据绑定添加到 ComboBox

你需要一个新的 class:

public class Kostenstellen: ObservableCollection<Kostenstelle>
{
}

还有一个填充方法,代码行如下:

var kostenstellen = new Kostenstellen();

foreach mitarbeiter in mitarbeiterList
{
    kostenstellen.Add(mitarbeiter.kostenstelle);
}

var cvsCombobox = new CollectionViewSource() { Source = this.operationList };

this.myCombobox.SetBinding(ItemsControl.ItemsSourceProperty, new Binding() { Source = cvsCombobox });

现在 Combobox 中将只有“(Kostenstelle)”作为字符串。 所以你需要覆盖 Kostenstelle class

ToString() 方法
public partial class Kostenstelle
{
    public override string ToString()
    {
        return this.ID.ToString();
    }
}

提示: 下次使用英文变量和 class 名称 :)

你可以在你的 xaml 文件中做很多事情 :) 我最近用了这个... 在 xaml 文件中,您现在可以定义组合框在页面上的位置。 稍后可以通过代码设置内容。

<GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemGridView"
        AutomationProperties.Name="Items In Group"
        TabIndex="1"
        Grid.RowSpan="2"
        Padding="120,126,120,50"
        ItemsSource="{Binding}"
        SelectionMode="None"
        IsSwipeEnabled="false"
        IsItemClickEnabled="True"
        ItemClick="ItemView_ItemClick"
        >
        <GridView.ItemTemplate >
            <DataTemplate >
                <Grid Height="150" Width="480"  Background="{StaticResource  ListViewItemPlaceholderBackgroundThemeBrush}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>


                    <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,10,0,0" >

                        <TextBlock Text="{Binding title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" FontSize="25"/>
                        <Line/>
                        <TextBlock Text="{Binding subtitle}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" FontSize="20" Margin="0,10,0,0" />
                        <Line/>
                        <TextBlock Text="{Binding description}" Style="{StaticResource BodyTextBlockStyle}" MaxHeight="60" FontSize="15" Margin="0,10,0,0"/>
                        <Button Tag="{Binding title}" Click="ItemButtonClicked" Content="Details" FontSize="15" Margin="0,10,0,0"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
        <GridView.ItemContainerStyle>
            <Style TargetType="FrameworkElement" >
                <Setter Property="Margin" Value="52,0,0,2"/>

            </Style>
        </GridView.ItemContainerStyle>
    </GridView>