组合框 wpf c# 中项目的不完整显示

Incomplete display of items in combobox wpf c#

我正在使用 wpf c# 和 Entity Framework

我有一个 DataGrid 显示来自数据库的数据

当用户单击数据网格时,该行将在组合框中显示项目(加载组合框中的列)

但问题是组合框不显示普通列表

后面的代码 CS :

DENAF1399Entities dbms = new DENAF1399Entities();

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var qre = dbms.Database.SqlQuery<Q_View>("SELECT * FROM Q_View");
    datagrid1.ItemsSource = qre.ToList();
}

private void datagrid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Q_View QVkala = datagrid1.SelectedItem as Q_View;
    if (QVkala != null)
    {
        combobox1.ItemsSource = QVkala.NAMES;
    }
}

我试过了

-更改组合框的字体

-使用新的组合框

但没用

请帮帮我

在形成期间编辑:我对发生的事情变得显而易见。 Q_View.NAMES 是一个字符串,通过将 combobox1.ItemsSource 设置为 属性,它将各个项目标识为字符串中的字符(因为字符串是 IEnumerable<char>)。

如果您想要组合框中的内容是所选项目的每一列中的内容,那么方法是这样的:

private void datagrid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Q_View QVkala = datagrid1.SelectedItem as Q_View;
    if (QVkala != null)
    {
        object[] items = { QVkala.CODE, QVkala.NAME, QVkala.NAMES, QVkala.TOZIH } //etc whatever properties you want to project into this
        combobox1.ItemsSource = items;
    }
}

关于答案的原创作品

乍一看,您的数据似乎被转置了,但总的来说,您似乎没有使用 WPF 或 Entity Framework,就像您真的可以使用它们一样。 WPF 是为 MVVM 设计而制作的,Entity Framework 是为将表格视为对象集合而制作的。对您的应用程序了解不多,以下是我的入门方式:

首先,我会把除了 auto-generated 之外的所有东西都移出 MainWindow.xaml.cs,并开始一个新的单独的 class。 (注意:可能有编译器错误,因为这是完全即兴的)

public class MainWindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged; //MainWindow.xaml will hook into this
    
    public ObservableCollection<Q_View> Q_Views { get; private set; }
    private Q_View selectedQView;
    public Q_View SelectedQView
    {
        get => selectedQView;
        set
        {
            if(value != selectedQView)
            {
                selectedQView = value;
                PropertyChanged?.Invoke("SelectedQView");
            }
        }
    }
}

然后在 MainWindow.xaml.cs 中,生成的唯一变化是构造函数(即使不更改 code-behind,也有另一种方法可以做到这一点,但我不会在这里讨论,因为我不像 C#)xaml-adept

public class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = new MainWindowViewModel();
        InitializeComponent(); //that's auto-generated
    }
}

最后,xaml 用于您的 DataGrid。像这样编辑它:

<DataGrid Name="QViewDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Q_Views}" SelectedItem="{Binding SelectedQView}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="CODE" Binding="{Binding Path="CODE"}"> //and so forth with more columns
    </DataGrid.Columns>
</DataGrid>

ComboBox 将使用类似的语法来绑定 ItemsSource 和 SelectedItem。这样做可以让您避免使用事件处理程序和处理样板来更新这么多东西。