组合框WPF C#中项目的显示不完整

时间:2020-10-21 20:28:47

标签: combobox datagrid items

我正在使用wpf c#和Entity Framework

我上面有一个DataGrid,用于显示数据库中的数据

当用户单击datagrid时,该行将在ComboBox中显示项目(在组合框的列上加载)

但问题是组合框未显示“普通”列表 enter image description here

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;
    }
}

我尝试过

-更改组合框的字体

-使用新的组合框

但是没用

请帮助我

1 个答案:

答案 0 :(得分:1)

在编队期间进行编辑:对我而言,发生的一切只是显而易见的。 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用于处理表,例如对象集合。对您的应用程序一无所知,这是我的入门方法:

首先,除了将自动生成的内容从MainWindow.xaml.cs中移出,我基本上将所有其他内容移开,并开始一个新的单独的类。 (注意:由于完全没有袖口,可能会出现编译器错误)

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中,生成的唯一变化就是构造函数(即使不更改背后的代码,也有另一种方法可以执行此操作,但是我不会在这里进行介绍,因为我没有就像我使用C#一样使用xaml)

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

最后,是DataGrid的xaml。像这样编辑它:

<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的相似语法。这样一来,您就可以避免使用事件处理程序,也不必处理用于更新很多东西的样板。

相关问题