【问题标题】:Incomplete display of items in combobox wpf c#组合框中项目的不完整显示wpf c#
【发布时间】:2020-10-21 20:28:47
【问题描述】:

我正在使用 wpf c# 和实体框架

我有一个显示数据库数据的 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;
    }
}

我试过了

-更改组合框的字体

-使用新的组合框

但没用

请帮帮我

【问题讨论】:

    标签: combobox datagrid items


    【解决方案1】:

    在形成过程中编辑:对我来说,发生了什么变得很明显。 Q_View.NAMES 是一个字符串,通过将combobox1.ItemsSource 设置为该属性,它会将各个项目标识为字符串中的字符(因为字符串是IEnumerable&lt;char&gt;)。

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

    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 或实体框架,就像您真的可以使用它们一样。 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 的类似语法。这样做可以避免使用事件处理程序和处理样板来更新这么多东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多