2015-05-19 35 views
2

可變列的表模型我有如下表:創建在MVC

 | Math | English | Chemistry 
John J. | A | F |  B 
Mike M. | A | F |  B 
Eve E. | A | F |  B 

所以我有一個變量數列(可以在運行時進行設置)和學生的數量可變的。

我的SQL數據庫可以樣子:

Table 1 
    studentID 
    studentName 
    studentAddress 

Table 2: 
    disciplineID 
    disciplineName 
    disciplineTeacher 

Table 3: 
    studentID 
    disciplineID 
    grade 

應該如何我的模型是什麼樣子?我可以做些什麼:

public class Catalog 
{ 
    public int ID { get; set; } 
    public virtual IEnumerable<Discipline> Disciplines { get; set; } 
    public virtual IEnumerable<Student> Students { get; set; } 
    public virtual IEnumerable<Grades> StudentGrades { get; set; } 
} 

internal class Discipline 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

internal class Student 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

internal class Grades 
{ 
    public int StudentId { get; set; } 
    public int DisciplineId { get; set; } 
    public char Grade { get; set; } 
} 

這是做這個多列/運行時定義的正常方法嗎? 如何確保視圖中的規則始終處於同一順序? 如何確保在視圖中呈現表格行時爲每個學生顯示正確的學科正確的成績?

謝謝!

回答

1

這是做這個多列/運行時定義的正常方法嗎?

這不是唯一的方法,但(對我來說)將所有單獨的數據傳遞給視圖並讓視圖對其進行排序似乎沒有任何問題。

您可以轉換爲學生的ILookup - 這會減少視圖中的代碼。

我怎樣才能確保學科總是在視圖中的順序相同?

到目前爲止,您尚未包含您嘗試過的內容。

本質:循環每一個學生,然後通過各個學科循環,並找到每個相應的等級 - 如果沒有一個,顯示一個「 - 」

是這樣的:你應該使用@ Html.DisplayFor etc

<tbody> 
    @foreach(var student in Model.Students) 
    { 
    <tr> 
     <td>@student.Name</td> 
     @foreach(var discipline in Model.Disiplines) 
     { 
      var grade = Model.Grades.Where(
          x => x.StudentId == student.StudentId 
           && x.DisciplineId == discipline.DisciplineId) 
          .FirstOrDefault(); 
      <td> 
       @(grade==null ? "-" : grade.Grade) 
      </td> 
     } 
    </tr> 
    } 
+0

這種方法最大的問題是我失去了數據庫支持。 – AndreiM

+0

在您的評論之後,產品目錄如下所示: public class Catalog2 { {0} {0} public int ID {get ;組; } public virtual IEnumerable Disciplines {get;組; } 公共虛擬ILookup > StudentGrades {get;組; } } – AndreiM

+0

這意味着學生對同一學科有多個等級。 'ILookup >'。由於可能有兩名同名的學生,因此請始終鏈接ID。如果你想從數據庫加載,然後創建一個視圖和匹配的類。 –