现在有如下结果集,是关于字典的。
简单写了DAL和BLL,
DAL:
public List<zidian_content> GetList(string bushou) { DataTable table = SqlHelper.ExecuteDataTable("select * from sm_zidian where bushou=@bushou", new SqlParameter("@bushou", bushou)); List<zidian_content> list = new List<zidian_content>(); for (int i = 0; i < table.Rows.Count; i++) { DataRow row = table.Rows[i]; zidian_content model = new zidian_content(); model.id = (int)row["id"]; model.zi = (string)row["zi"]; model.py = (string)row["py"]; model.pinyin = (string)row["pinyin"]; model.wubi = (string)row["wubi"]; model.bihua = (string)row["bihua"]; model.bushou = (string)row["bushou"]; model.jianjie = (string)row["jianjie"]; model.xiangjie = (string)row["xiangjie"]; model.hits = (int)row["hits"]; list.Add(model); } return list; }
BLL中很简单:
public List<zidian_content> GetList(string bushou) { return dal.GetList(bushou); } #endregion
然后在前台.aspx.cs中写了一个方法,也很简单
protected string bushou; protected List<zidian_content> list = new List<zidian_content>(); if(!IsPostBack) { list=list = new zidian_content_bll().GetList(bushou); }
前台循环出来:
<%foreach(var item in list){ %> <a href="/view/<%=item.id %>"><%=item.zi %>></a> <%} %>
这样简单做出来后如下显示:
可是现在的要求是做到像下面这样的列表显示:
橡这样的问题,应该 从哪里开始改造,想了一下午, 都没头绪 ,所以来这里求救 了。
1) .aspx.cs 里面
1 protected string bushou; 2 protected List<zidian_content> list = new List<zidian_content>(); 3 List<int> bihuas = null; 4 if(!IsPostBack) 5 { 6 list=list = new zidian_content_bll().GetList(bushou); 7 bihuas = (from o in list orderby o.bihua ascending select o.bihua).Distinct().ToList(); 8 }
2)前台循环出来:
1 <%foreach(int bihua in bihuas){ 2 List<Users> items = list.Where(o => o.id == bihua).ToList(); 3 %> 4 外部笔画数<%= bihua%>: 5 <%foreach(var item in items){%> 6 <a href="/view/<%=item.id %>"><%=item.zi %>></a> 7 <%}%> 8 <%} %>
思路和代码。
原来LINQ这么优美。
用css控制啊 用ul标签可以达到你要的效果
你 部外笔画数1 还是没看明白啊。
我上面截图是 部外笔画数1,简单点也可以用笔画数1,就是说笔画数1的有几个汉字,然后显示在一行,笔画数为2的有几个汉字,显示在一行。
我的想法是还要对结果集再进行操作,但是怎么写没有思路了。
@abc54288: ...这样就不知道了,页面怎么判断你的字有多少个笔画,除非你在后台先整理好。
@abc54288: 我看了你的数据库之后,你可以跟你你数据库的字段笔画数作为在页面的循环条件,循环出笔画数是1的字,我学的是java,只能写一段java代码给你看看,你自己看着找思路,例如:
<c:foreach items="${list}" var ="bean" varStatus="status"> <c:if test="${bean.bihuashu==(status.index+1)}"> 外部笔画数${status.index+1}:${bean.word} </c:if> </c:foreach>
这段代码能分出你的笔画数是几的字,但是如果有两个笔画数是1的他还是会循环两次,不会直接加到同笔画数行的后面。要做到你那种效果还是要多判断循环几次才可以
根据部首找到所有的字 然后用Dictionary<string,int> int:笔画数 string 字