【问题标题】:Displaying a single value from a one to many relationship in a GridView在 GridView 中显示一对多关系中的单个值
【发布时间】:2011-07-28 10:34:02
【问题描述】:

我有 3 张桌子:

订购, 订单状态, 订单状态定义

一个订单有许多 OrderStates,然后有一个 OrderStateDefinition。

我有一个网格视图,我试图在其中仅显示 OrderStates 集合中的一个值 - 已添加的最新 OrderState。

我已经阅读了一些关于子查询的内容,但我不确定如何实现我想要的结果。

抱歉,缺少信息,我有一张很好的表结构图片,但 stackoverflow 不允许我上传。

编辑 -

好的,我想出了如何做到这一点。在填充 GridView 时,我使用事件 OnRowCreated 来设置所需字段的文本。为了获得我需要的控件,我使用了 e.Row.FindControl。

最后它的代码非常简单。当我最终寻求帮助时,我似乎总是能解决这些问题。

 try
  {
    int orderID = e.Row.RowIndex;

    Order order = ShopEntities.Orders.Single(o => o.OrderStateID == orderID);
    // I can now get the list of orderstates
    OrderStateDefinition osd = order.OrderStates.OrderBy(o => o.Date).Last().OrderStateDefinition;

    ((Label)e.Row.FindControl("Label2")).Text = osd.State;
  }
  catch
  {
  }

【问题讨论】:

  • 您如何确定哪个 OrderState 是最新的? OrderStates 表中有类似 CreatedOn 字段的内容吗?
  • 获取 id 的 maxOrderStates 的时间戳,这表明它是最新的,并使其成为 where 子句的一部分
  • 如果你给出所有 3 个表的结构会更好。

标签: c# asp.net gridview one-to-many


【解决方案1】:

我经常发现创建自己的 SQL 来执行此操作更容易。 sql可能有点复杂,但比c#更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多