【问题标题】:How to create a virtual column on a gridview based on a particular gridview columns如何根据特定的gridview列在gridview上创建虚拟列
【发布时间】:2013-10-24 09:30:57
【问题描述】:

请我有一个项目,我使用实体框架作为我的 ORM 查询数据库。这是我的查询

    Dim subjectSearch = From subSearch In DemoSchool.EssenceSubjectRegistrations Where subSearch.Session = drpSession.SelectedItem.Text _
                 AndAlso subSearch.Term = drpTerm.SelectedItem.Text AndAlso subSearch.RealClass.ClassSN = findClassSN.FirstOrDefault AndAlso _
                  subSearch.SubjectCode = drpSubject.SelectedValue _
                  Select New With {.SubjectRegSN = subSearch.SubjectRegSN,
                                  .FirstName = subSearch.Student.FirstName,
                                  .Surname = subSearch.Student.Surname,
                                   .CA1 = subSearch.CA1,
                                    .CA2 = subSearch.CA2,
                                    .CA3 = subSearch.CA3,
                                    .CA4 = subSearch.CA4,
                                    .CA5 = subSearch.CA5}

然后我查询我的结果,以便我可以通过这样做对其进行一些操作

    Dim secSubjectSearch = (From jamie In subjectSearch Select jamie).ToList() _
                       .Select(Function(jamie) New With {.SubjectRegSN = jamie.SubjectRegSN,
                       .FirstName = jamie.FirstName,
                       .Surname = jamie.Surname,
                        .CA1 = jamie.CA1,
                         .CA2 = jamie.CA2,
                         .CA3 = jamie.CA3,
                         .CA4 = jamie.CA4,
                         .CA5 = jamie.CA5,
                         .MidTerm = CDbl(jamie.CA1 + jamie.CA2 + jamie.CA3 + jamie.CA4 + jamie.CA5) / 5})

第二个查询的结果绑定到网格视图,该网格视图可以正确呈现,因为它应该呈现。我的问题是我想在 .MidTerm 有界列之后在 gridview 上创建一个名为 Rank 的虚拟列,该列将显示搜索结果中每个人记录的位置。

    NAME        CA1      CA2      CA3    CA4     CA5   MIDTERM    RANK
    James       50        50      60      40      60      52        3
    Essty       100       50      50      50      50      60        2
    Markus      100       40      50      60      50      60        2
    Code        100       100     100     100     50      90        1

以上是gridview 列的格式。我希望列 Rank 是根据学生的期中分数计算的虚拟列。代码 VB 得分 90 所以他的排名是 1 等等。请我不知道如何计算这个排名列和代码得到最高和最小的。真的我需要帮助谢谢

【问题讨论】:

    标签: vb.net gridview linq-to-entities


    【解决方案1】:

    两种方式。

    1. 使用未绑定列并计算/显示排名

    2. 有一个 RANK 字段并预先计算并绑定它,例如:

              Dim secSubjectSearch = (From jamie In subjectSearch Select jamie).ToList() _
                     .Select(Function(jamie) New With {.SubjectRegSN = jamie.SubjectRegSN,
                     .FirstName = jamie.FirstName,
                     .Surname = jamie.Surname,
                     .CA1 = jamie.CA1,
                     .CA2 = jamie.CA2,
                     .CA3 = jamie.CA3,
                     .CA4 = jamie.CA4,
                     .CA5 = jamie.CA5,
                     .MidTerm = CDbl(jamie.CA1 + jamie.CA2 + jamie.CA3 + jamie.CA4 + jamie.CA5) / 5,
                     .RANK = -1}).ToList()
              dim sorted = secSubjectSearch.Select(function(n) n.MidTerm).Distinct().OrderByDescending(function(n) n).ToList()
              for each itm in secSubjectSearch
                  itm.RANK = sorted.IndexOf(itm.MidTerm) + 1
              next
      

    -- 没测试,用记事本写的……

    【讨论】:

    • 就像一个魅力。请您向我解释为什么您的代码有效,以便我可以学习。谢谢
    • 没什么棘手的 - 只需将所有不同的 MidTerm 值按降序存储在一个列表中,然后为每个学生找到正确的 RANK - 通过在排序列表中找到 MidTerm 的索引然后加一.当然,我们必须为这个 RANK 信息设置一个占位符:要做到这一点,只需放置一个默认值为 -1 的属性 RANK(该值无关紧要,您稍后会更新它)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多