2013-10-24 3 views
0

Пожалуйста, у меня есть проект, который я запрашиваю в базе данных, используя сущность framework как мой ORM. Это мой запросКак создать виртуальный столбец в gridview на основе конкретных столбцов gridview

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}) 

Результат второго запроса ограничена в GridView, который правильно отображается, как предполагается. Моя проблема в том, что я хочу создать виртуальный столбец под названием Rank на gridview после ограниченного столбца .MidTerm, который отобразит позицию каждой записи человека в результатах поиска.

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 

Выше представлен формат столбцов сетки. Я хочу, чтобы столбец Ранг был виртуальным столбцом, который вычисляется на основе среднего критерия студентов. Код VB набрал 90, чтобы его рейтинг равнялся 1 и так далее. Пожалуйста, я не знаю, как вычислить этот столбец рангов и код чтобы получить наивысший и самый маленький. Мне очень нужна помощь благодаря

ответ

0

Два способа.

  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 
    

- Не протестирован, написал его с помощью блокнота ...

+0

работал как шарм. Пожалуйста, объясните мне, почему ваш код работал, чтобы я мог учиться. Спасибо –

+0

Ничего сложного - просто сохраните все отдельные значения MidTerm в списке с убывающим порядком, а затем для каждого ученика найдите правильный RANK - найдите индекс MidTerm в отсортированном списке, а затем плюс один. конечно, у нас должен быть местозаполнитель для этой информации RANK: чтобы сделать это, просто поместите свойство RANK со значением по умолчанию -1 (значение не имеет значения, поскольку вы обновите его позже) – Rex

Смежные вопросы