は
コントローラ
public class UserController : Controller
{
// GET: User
public ActionResult Index()
{
var users = new Users();
users.Add(CreateUser("Bob", 2, true, 3, false, 1, true));
users.Add(CreateUser("Sue", 1, true, 1, true, 0, false));
users.Add(CreateUser("Margaret", 1, true, 1, false, 2, true));
return View(users);
}
private User CreateUser(string name,
int coffeeSkillLevel, bool coffeeInterested,
int typingSkillLevel, bool typingInterested,
int searchSkillLevel, bool searchInterested)
{
const string skillCoffee = "Coffee";
const string skillTyping = "Typing";
const string skillSearching = "Google Search";
var user = new User() { Name = name };
var userBobSkillCofeeMaking = new UserSkill
{
Skill = skillCoffee,
SkillLevel = coffeeSkillLevel,
IsInterested = coffeeInterested
};
var userBobSkillTyping = new UserSkill
{
Skill = skillTyping,
SkillLevel = typingSkillLevel,
IsInterested = typingInterested
};
var userBobSkillGoogleSearching = new UserSkill
{
Skill = skillSearching,
SkillLevel = searchSkillLevel,
IsInterested = searchInterested
};
user.UserSkills[skillCoffee] = userBobSkillCofeeMaking;
user.UserSkills[skillTyping] = userBobSkillTyping;
user.UserSkills[skillSearching] = userBobSkillGoogleSearching;
return user;
}
}
ユーザモデル
public class User
{
public User()
{
UserSkills = new Dictionary<string, UserSkill>();
}
public string Name { get; set; }
public Dictionary<string, UserSkill> UserSkills { get; set; }
public List<string> UniqueSkills
{
get { return UserSkills.Values.Select(x => x.Skill).Distinct().ToList(); }
}
}
public class Users : List<User>
{
public List<string> UniqueSkills
{
get
{
var retVal = new List<string>();
foreach (var user in this)
{
retVal.AddRange(user.UniqueSkills);
}
return retVal.Distinct().OrderByDescending(x => x).ToList();
}
}
public int ColSpan => (UniqueSkills.Count * 2);
}
UserSkillモデル
の例です210
public class UserSkill
{
public string Skill { get; set; }
public int SkillLevel { get; set; }
public bool IsInterested { get; set; }
public string Interested => IsInterested ? "Y" : "N";
}
CSHTML
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
text-align: center;
}
<div>
<table class="table-bordered">
<thead>
<tr>
<th>User</th>
<th colspan="@Model.ColSpan">Skill</th>
</tr>
</thead>
<tbody>
<tr style="font-weight: bold">
<td></td>
@foreach (var skill in Model.UniqueSkills)
{
<td>@skill</td>
<td>Interested</td>
}
</tr>
@foreach (var user in Model)
{
<tr>
<td>@user.Name</td>
@foreach (var skill in Model.UniqueSkills)
{
<td>@user.UserSkills[skill].SkillLevel.ToString()</td>
<td>@user.UserSkills[skill].Interested</td>
}
</tr>
}
</tbody>
</table>
</div>
最終結果
だから私は、コードを試してみた、といくつかの理由のために私自身のモデルを使用しているようですただ与える同じ行の複数レコード。だから私は正しい列で終わるが、ただ3つのボブ! –
また、絶えず更新されているテーブルから不特定多数のスタッフがいる場合、これはどのように機能しますか? 'code' –
コードを見ずに何が間違っていると言っても大丈夫です。アイテムの数は、例として作成されています。コードから、Model Collectionにある任意の数のユーザーを繰り返します。最初の行をヘッダのように扱うだけです。 – Viju