【问题标题】:Replace a ID Value (of a Foreign Key) In A View By Its Value将视图中的 ID 值(外键的)替换为其值
【发布时间】:2012-03-23 18:18:26
【问题描述】:

我有两个表,由外键 CarrierID 绑定:

Carrier[CarrierID,CarrierName] 
CarrierID = 1, CarrierName = DHL
CarrierID = 2, CarrierName = Fedex

...

Vendor[VendorID, VendorName, CarrierID]  
VendorID = 1, VendorName =D-link , CarrierID=1  
VendorID = 2, VendorName = Netbes , CarrierID= 2

如何在供应商 gridView 而不是 CarrierID 中显示其值(即:CarrierName)? 示例”

View Vendor gridview
1 | D-link | DHL
2 | Netbes | Fedex

提前致谢

【问题讨论】:

    标签: c# wpf linq-to-sql data-binding datacontext


    【解决方案1】:

    你可以在你的数据库中创建一个视图来完成你想要的:

    SELECT v.VendorName, c.CarrierName FROM Vendor v
      JOIN Carrier c ON c.CarrierId = v.CarrierId
    

    【讨论】:

    • 由于我使用此代码查看运营商,您能否解释更多...()
    【解决方案2】:

    我认为你是指 LinqToSql:

    var context = new DataContext();
    System.Data.Linq.DataLoadOptions dlo = new DataLoadOptions();
    dlo.LoadWith<Vendor>(v => v.Carrier);
    context.LoadOptions = dlo;
    

    ...

    gridview.DataContext/ItemsSource = /*my query result of Vendor*/ IQueryable<Vendor>.ToList();
    

    在您的 GridView 中

    {Binding Path=Carrier.CarrierName, FallBackValue=''}
    

    FallbackValue 已设置,因为 Carrier 可以为 null。

    【讨论】:

    • @slivermind 什么将是“DataLoadOptions”,因为我收到错误说找不到命名空间
    • @ThivakaranSelvarajoo 它在 System.Data.Linq 中,我已经更新了我的答案。
    • DataLoadOptions 包含 Carrier,因此如果您处理 DataContext,它们仍然会在 LazyLoading 的情况下存在。
    • @slivermind.. 好的,我找到了解决方案...我只需要添加这个 {Binding Path=Carrier.CarrierName, FallBackValue=''} ..它现在可以工作了..Thx。
    • @slivermind... 我现在还有一个问题。我在尝试编辑运营商名称时收到此错误“ForeignKeyReferenceAlreadyHasValueException”。
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 2015-03-08
    • 2015-08-03
    • 1970-01-01
    • 2018-03-11
    • 2016-01-29
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多