【问题标题】:Fill a datagrid with EF6 and MVVM使用 EF6 和 MVVM 填充数据网格
【发布时间】:2021-04-10 21:05:07
【问题描述】:

我想我几乎浏览过关于这个主题的每一页,但我似乎无法弄清楚如何在 WPF 数据网格中正确显示数据。我仍在学习技巧,但我相信一切都应该有效,但事实并非如此。我已经有一个 SQL Server 数据库启动并运行,其中包含实际数据,但是数据网格仍然显示为空。有什么我忽略的吗?

这是datagridview.xaml

    <DataGrid x:Name="DatagridC" AutoGenerateColumns="False" ItemsSource="{Binding Schools}"  >
        <DataGrid.Columns>
            <DataGridTextColumn Header="SchoolID" Binding="{Binding SchoolID}" Width="SizeToHeader" />
            <DataGridTextColumn Header="School" Binding="{Binding Name}" Width="SizeToHeader"/>
        </DataGrid.Columns>
    </DataGrid>

这是 datagridview.xaml.cs(基于有关此主题的较早问题)(我知道使用 INotifyPropertyChanged 会很聪明,仍在自学那是什么,但我现在的主要目标是展示数据)

    private ObservableCollection<School> schools;

    public ObservableCollection<School> Schools
    {
        get { return schools; }
        set
        {
            schools = value;
        }
    }

还有学校的班级

public class School
{
    public int SchoolID { get; set; }
    public string Name { get; set; }
}

}

我已经尝试了多种方法,有时我会弹出一个警告,提示未找到任何数据上下文,但我不明白这一次以何种方式是必要的。 我打赌我犯了新手错误,但有人能指出我正确的方向吗?

【问题讨论】:

  • 您提供的代码中没有任何内容可以创建上下文实例。这应该在某处完成。

标签: c# wpf mvvm entity-framework-6


【解决方案1】:

我认为根据您的警告,您的数据库上下文不可用。您可以通过以下步骤解决此问题。 检查您的数据库连接

  • 检查上下文是否能够打开数据库
  • 检查 EF 生成的查询
  • 在SSMS中执行上述步骤得到的查询
  • 如果所有这些步骤都通过了,请检查您的数据适配器
  • 如果数据适配器正常,则应填充数据网格
  • 如果仍有任何问题,请更新数据库上下文和数据适配器的代码,以便我们查看失败的地方

【讨论】:

    【解决方案2】:

    您需要设置DataGridDataContext 或其任何父元素。例如,您可以在datagridview.xaml.cs 的构造函数中设置DataContext

    public datagridview()
    {
        InitializeComponent();
        DataContext = this;
    }
    

    另一个选项是在 XAML 标记中指定绑定的来源:

    <DataGrid x:Name="DatagridC" AutoGenerateColumns="False"
        ItemsSource="{Binding Schools, RelativeSource={RelativeSource AncestorType=Window}}">
        
    

    上述标记sn-p假设定义Schools属性的类是DataGrid的父window,即datagridview.xaml.cs是一个Window .如果是UserControl,则应将AncestorType 更改为UserControl

    【讨论】:

    • 感谢您的回答,我采用了下面的方法,将祖先类型更改为 usercontrol(因为它确实是 usercontrol),但偶然发现了一个新错误。 {Binding Schools} 部分下方的“在 datacontext usercontrol 中找不到成员”。我是否也应该在其他地方定义成员?
    • 您尝试绑定的Schools 属性在哪里实际定义?您在哪里看到该错误消息?
    • 你如何初始化Schools
    • School 本身就是一个类(也是 MSSQL 数据库中的一个表)。我假设 datagridview.xaml.cs 中的 ObservableCollection 足以用作绑定。这不是我看到的错误,抱歉。当我将鼠标悬停在 Itemsource="{Binding School}( 等.xaml)到数据库(和学校),所以它不应该是一个连接问题
    • 如何将对象添加到您尝试绑定的ObservableCollection&lt;School&gt; 属性...?它不会自行填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2020-01-17
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多