繁体   English   中英

使用WPF中的Entity Framework显示相关数据的单个数据成员

[英]Display single data member of related data using Entity Framework in WPF

我在实体框架中有两个相关实体,即Stock ,然后是Suppliers ,其中一个库存实体可以有一个供应商,而一个供应商可以有很多库存项目。

我有一个数据网格,我想在其中显示有关库存的所有数据,例如ID,名称,价格等,并包括它的SuppliersId

在下面的屏幕快照中,我希望它在显示“ SuppliersId地方显示SuppliersId ,但我无法获取它,因此它不仅仅包含整个对象的字符串。

程序截图

股票类别

class Stock
{
    public Stock()
    {
        this.SalesInvolvedIn = new HashSet<Sales>();
    }

    public int StockId { get; set; }
    public string StockName { get; set; }
    public int StockPrice { get; set; }
    public string StockType { get; set; }
    public ICollection<Sales> SalesInvolvedIn { get; set; }

    public Suppliers Suppliers { get; set; }
}

取得资料

public List<Stock> GetStock()
{                        
    return StockManagementDatabaseContext.Stocks.Include("Suppliers").ToList();
}

更新数据网格

private void UpdateStockList()
{
    List<Stock> stocklist = repository.GetStock();

    this.StockDataGrid.ItemsSource = stocklist;
}

我将如何去做呢?

编辑:显示供应商类别

class Suppliers
{
    public int SuppliersId { get; set; }
    public string SupplierName { get; set; }
    public string ContactPerson { get; set; }
    public int PhoneNumber { get; set; }

    public ICollection<Stock> StockSold { get; set; }
}

如果我理解正确,您只想显示供应商ID? 我想到两种方法: ViewModel或不使用XAML的datagrid中的自动生成的列。

您可以这样创建一个ViewModel

public class StockViewModel
{
    public int StockId { get; set; }
    public string StockName { get; set; }
    public int StockPrice { get; set; }
    //etc....
    public int SupplierId { get; set; }
}

获取数据:

public List<StockViewModel> GetStock()
{                        
    return StockManagementDatabaseContext.Stocks.Include("Suppliers")
    .Select(a => new StockViewModel
    {
         StockId = a.StockId,
         StockName = a.StockName,
         StockPrice = a.StockPrice,
         //and any other you may wish to include
         SupplierId = a.Suppliers.SuppliersId
    }).ToList();
}

加载到网格

private void UpdateStockList()
{
   this.StockDataGrid.ItemsSource = repository.GetStock();
}

另外,您可以通过将AutoGenerateColumns设置为False来选择要在XAML中绑定网格的对象

    <DataGrid Name="StockDataGrid"
              ItemsSource="{Binding}"             
              AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding StockId }"></DataGridTextColumn>
            <DataGridTextColumn Header="Name" Binding="{Binding StockName }"></DataGridTextColumn>
            <DataGridTextColumn Header="Price" Binding="{Binding StockPrice}"></DataGridTextColumn>
            <DataGridTextColumn Header="Supplier ID" Binding="{Binding Suppliers.SupplierId}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM