我正在使用wpf c#和Entity Framework
我上面有一个DataGrid,用于显示数据库中的数据
当用户单击datagrid时,该行将在ComboBox中显示项目(在组合框的列上加载)
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;
}
}
我尝试过
-更改组合框的字体
-使用新的组合框
但是没用
请帮助我
答案 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的相似语法。这样一来,您就可以避免使用事件处理程序,也不必处理用于更新很多东西的样板。