0

我需要一个看起来像这样的视图:

[+] Group Name1 //这应该是一个手风琴菜单

子名称| 比例1| 规模2| 比例3| Scale4 //这应该是表头

美国广播公司 | ○ | ○ | ○ | O // 'Abc' 是文本,'O' 是单选按钮

XYZ | ○ | ○ | ○ | O // 同上一行

[+] 组名2
子名 | 规模1 | 规模2 | 规模3 | Scale4 //和上一张表一样

二维码 | ○ | ○ | ○ | O
Mno | ○ | ○ | ○ | ○

我可以通过单击 [+] 获得表格。而且,我正在生成行列表,使用从数据库表中获取值的 foreach 循环。但是,我面临的问题是,我能够在一个表中获取值,并且所有值都列在其中,例如:abc,xyz,..,pqr,mno,... 但我需要它来排序IT 根据其“组名”,尽管我可以对其进行分组。请建议我如何将它与视图绑定。另外,任何人都可以建议我,我如何使用单选按钮。为此,我需要将所选单选按钮的值存储在数据库表中。

这是我的看法:

<div class='toggle'>
      <h2>&nbsp;</h2>
          <h2>lList</h2>
      <div class="togglebox">

    <table width="50%">
    <br />
    <br />
     <tr>
     <th>
      Group Name
     </th>
     <th>
     Sub Name
     </th>
     <th>
     Scale1
     </th>
     <th>
     Scale2
     </th>
     <th>
     Scale3
     </th>
     <th>
     Scale4
     </th>
     </tr>

     <% int counter = 0; %>
      <% foreach (var item in Model.skills)
         { %>

     <tr>
        <td>
       <%=item.GroupName%>
       </td>
        <td>
       <%=item.SubName%>
       </td>
       <td>
       <%--<input type="radio" name="scale<%:counter %> />--%>
       <%:Html.RadioButton("scale" + counter, 0, item.Scale)%>
       <%--<%=Html.RadioButtonFor(m => item.Scale, "Scale1", new { @name = "scale" + counter })%>--%>
       </td>
       <td>
       <%:Html.RadioButton("scale" + counter, 1, item.Scale)%>
      <%-- <%=Html.RadioButtonFor(m => item.Scale,"Scale2", new { @name = "scale" + counter})%>--%>
       </td>
       <td>
        <%:Html.RadioButton("scale" + counter, 2, item.Scale)%>
       <%--<%=Html.RadioButtonFor(m => item.Scale,"Scale3", new { @name = "scale" + counter})%>--%>
       </td>
       <td>
        <%:Html.RadioButton("scale" + counter, 3, item.Scale)%>
       <%--<%=Html.RadioButtonFor(m => item.Scale,"Expert", new {@name = "scale" + counter})%>--%>
       </td>
     </tr>
       <% counter++;
         } %>


     </table>

这是我的模型:

public class Skill
{
    [DisplayName("Sub Name")]
    [Required]
    public string SubName { get; set; }


    [DisplayName("Group Name")]
    [Required]
    public string GroupName { get; set; }

    public bool Scale { get; set; }



}

这是我的 DataAccessLayer:

        public static DataTable GetAllList(string ID)
    {
        SqlConnection con = new SqlConnection(connect);
        con.Open();
        SqlCommand cmd = new SqlCommand("spGetSkillsList", con);
        cmd.Parameters.AddWithValue("@ID", 1);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds.Tables[0];
    }

这是我的业务层

 public static SkillMetricsViewModel GetAllList(string ID)
    {
        ListViewModel viewModel = new ListViewModel();
        DataTable dt = DAL.GetAllList(ID);

        List<Skill> skills = new List<Skill>();
        foreach (DataRow row in dt.Rows)
        {
            Skill skill = new Skill() { GroupName = row["GroupName"] != null ? row["GroupName"].ToString() : string.Empty, SubName = row["SubName"] != null ? row["SubName"].ToString() : string.Empty};
            skills.Add(skill);
        }
        IEnumerable<IGrouping<string, Skill>> test = skills.GroupBy(i => i.SkillGroupName);
        viewModel.skills = skills.GroupBy(x => x.SkillGroupName).SelectMany(r => r).ToList();
       return viewModel;

    }

请帮助我。提前感谢您的任何帮助。

4

1 回答 1

1

因此,如果您只需要始终按 GroupName 排序,那么在您的业务层中,您可以使用 linq 执行类似的操作

viewModel.skills = skills.OrderBy(x => x.GroupName)
于 2013-04-10T18:14:01.990 回答