从一个视图引用到另一个视图

Referencing from one view to another

我正在学习使用 Visual Studio、C# 和 Entity Framework 核心,我尝试创建一个 WPF 来编辑数据库中的条目。目前我使用 Adventureworks2014 数据库。

我有一个数据网格,它从我在 Microsoft SQL 服务器管理中创建的视图中获取数据。

public void PopulateDataGrid()
{
        using (var db = new Adventureworks2014Context())
        {                      
              DG1.ItemsSource = db.SmallView.ToList<SmallView>();
        }
}

当我双击我的 Datagrid 中的一个条目时,我希望该应用程序打开一个新的 window,其中显示了该人的数据。根据复选框的状态,我想使用其他视图

所以我想选择一个人,获取这个人的 ID 并在不同的视图中使用这个 ID 来获取我想要的数据。

这是我想出的(不起作用):

 private void DG1DoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (DG1.SelectedIndex != -1)
            {                
                using (Adventureworks2014Context db = new Adventureworks2014Context())
                {
                   
                    SmallView smallView = (SmallView)DG1.SelectedItem;    //getting the Data of a person
                    txtIdCreate.Text = Convert.ToString(smallView.BusinessEntityId);        //just to check if i get an ID       

                                  
                    NoAdminView noAdminView = new NoAdminView();
                    db.NoAdminView.FirstOrDefault(x => x.BusinessEntityId == smallView.BusinessEntityId);                 
                    TxtFirstName.Text = noAdminView.FirstName; //checking if i get anything from the other view
    

                }

            }

我的文本字段是空的,所以我没有从视图中获得正确的引用。
我也可以对我 need/will 需要的所有条目使用不同的视图,并且可以只显示特定的列,但这不是我尝试使用的方法,因为我认为当我能够“在两者之间切换”时它会非常有用views" 当我想要的时候,例如具有大量列的较大视图仅在需要时使用。当我唯一需要做的就是更改 ItemSource 时,它​​也可能非常有效。

当我在这里也错了时,很高兴知道为什么这个想法不正确。

很高兴收到一些反馈。 预先感谢您的宝贵时间。

如果你想使用EF-core从数据库中获取数据。

我建议你可以使用数据库优先。

首先,请安装以下nuget-package。

其次,请在软件包控制台中使用以下命令。

 PM> Scaffold-DbContext "Server=server name;Database=AdventureWorks2014;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

三、生成文件夹后Models,请在wpf app中尝试以下代码

 public MainWindow()
        {
           
            InitializeComponent();
            PopulateDataGrid();
        }
        public void PopulateDataGrid()
        {
            using (var db = new AdventureWorks2014Context())
            {
                var listentity = db.BusinessEntities.ToList<BusinessEntity>();
                dataGrid1.ItemsSource = listentity;

            }
        }
        private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (dataGrid1.SelectedIndex != -1)
            {
                using (AdventureWorks2014Context db = new AdventureWorks2014Context())
                {

                    BusinessEntity entity = (BusinessEntity)dataGrid1.SelectedItem;
                    txtID.Text = Convert.ToString(entity.BusinessEntityId);        //just to check if i get an ID       


                     Person p= db.People.FirstOrDefault(x => x.BusinessEntityId == entity.BusinessEntityId);
                     txtFirstName.Text = p.FirstName; //checking if i get anything from the other view


                }
            }
        }

结果: