C# 将多行分为单行和多列

C# 将多行分为单行和多列,c#,sql,asp.net-mvc,razor,html-table,C#,Sql,Asp.net Mvc,Razor,Html Table,我是一名年轻的学徒,希望在MVC中构建他的第一个应用程序。我目前正在尝试建立一个管理页面,它将显示员工技能矩阵的结果 因此,我试图显示信息的方式如下 问题是…信息如下表所示 我一辈子都搞不清楚我是怎么做的 这是表的当前代码 <div class="tblOverFlow"> <table class="table"> <thead class="thead-default"> <

我是一名年轻的学徒,希望在MVC中构建他的第一个应用程序。我目前正在尝试建立一个管理页面,它将显示员工技能矩阵的结果

因此,我试图显示信息的方式如下

问题是…信息如下表所示

我一辈子都搞不清楚我是怎么做的

这是表的当前代码

 <div class="tblOverFlow">
        <table class="table">
            <thead class="thead-default">
                <tr>
                    <th>User</th>
                    <th>Skill</th>
                </tr>
                <tr>
                    <th></th>
                    @foreach (var tableRefDbSet in Model)
                    {
                        <th>@tableRefDbSet.Skill </th>
                        <th>Interested?</th>
                    }
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    <td>@item.User</td>
                    <tr>
                            <td>@item.SkillLevel</td>
                            if (item.Interested == true)
                            {
                                <td Style="background-color: green;">Y</td>
                            }
                            else
                            {
                                <td style="background-color: Red;">N</td>
                            }
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>

使用者
技巧
@foreach(模型中的var表格REFDBSET)
{
@tableRefDbSet.Skill
有兴趣吗?
}
@foreach(模型中的var项目)
{
@项目.用户
@项目.技能水平
如果(item.interest==true)
{
Y
}
其他的
{
N
}
}
它仍然只是将它们堆叠在一起。我试着重新调整周围的一切,但它只是不会做我想要的

哦,忽略内联样式,它们只是在视觉上帮助我


在我寻找答案的同时,简单解释一下我做错了什么也会很有帮助

下面就是一个例子

控制器

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

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);
}
public class UserSkill
{
    public string Skill { get; set; }
    public int SkillLevel { get; set; }
    public bool IsInterested { get; set; }

    public string Interested => IsInterested ? "Y" : "N";
}
表格,td,th{
边框:1px纯黑;
}
桌子{
边界塌陷:塌陷;
宽度:100%;
}
th{
文本对齐:居中;
}

使用者
技巧
@foreach(模型中的var技能。唯一技能)
{
@技巧
感兴趣
}
@foreach(模型中的var用户)
{
@用户名
@foreach(模型中的var技能。唯一技能)
{
@user.UserSkills[skill].SkillLevel.ToString()
@user.UserSkills[skill]。有兴趣吗
}
}

所以我尝试了代码,出于某种原因,使用我自己的模型似乎只给出了同一行的多条记录。所以我得到的列是正确的,但只有3个bob!另外,如果我有一个不断更新的表中的无限数量的工作人员,这将如何工作<代码>代码如果不看代码就很难说出哪里出了问题,遵循相同的模式应该很管用。项目的数量只是作为一个示例构建的,它从代码中遍历模型集合中的任意数量的用户。仅将第一行视为标题。我认为这是要做的……`@foreach(模型中的var user){@user.UserRacf@foreach(模型中的var skill){@skill.SkillLevel@skill.interest}`如果技能不同,那么代码需要验证Null对象,并在这种情况下添加空白td。