摆脱控件之新手1
摆脱控件只要是借助于jquery的强大和web 服务(.service)和一般处理程序(.ashx),而达到更好的用户体验效果。当然,今天作为新手,暂时不考虑web服务和一般处理程序,而是先用.cs处理数据库数据。这个也是我第一次自己弄出来的,程序一开始用的是Repeater控件,而这里用的是IList,或者拼接html两种方法。因为我也是第一次做这种,所以只是简单的做了个显示数据,而没有修改添加那些,以后有机会一起补上。难免会有问题,大家多多指教。实例后面附上
首先用IList循环输出数据:
获得分页数据(DataSet类型)
DataSet ds = bll.GetPageList(pagesize, page, "", "Id desc");
转换成IList类型(这个步骤可以省略的,有个直接获取数据成IList类型的,因为我是直接从项目中提取的,就要转换下)
list = DataSetToIList(ds);
DataSetToIList方法
/// <summary> /// 把DataSet转换成IList<> /// </summary> /// <param name="ds"></param> /// <returns></returns> public static IList<MyWeb.Model.Contents> DataSetToIList(DataSet ds) { IList<MyWeb.Model.Contents> list = new List<MyWeb.Model.Contents>(); for (int i=0;i<ds.Tables[0].Rows.Count;i++) { MyWeb.Model.Contents model = (MyWeb.Model.Contents)Activator.CreateInstance(typeof(MyWeb.Model.Contents)); PropertyInfo[] properities = model.GetType().GetProperties(); //上面的这两句主要是获得model.name,model.name等的属性的。其中第一句也可以直接new MyWeb.Model.Contents model foreach (PropertyInfo item in properities) { for (int j = 0; j < ds.Tables[0].Columns.Count;j++ ) { if(item.Name.Equals(ds.Tables[0].Columns[j].ColumnName)) { if (ds.Tables[0].Rows[i][j]!=DBNull.Value) { item.SetValue(model, ds.Tables[0].Rows[i][j], null); } else { item.SetValue(model, null, null); } } } } list.Add(model); } return list; }
后台的.cs基本是这样了。
注意的一点是list,pcount,page,pagesize都要声明称全局的,前台要调用到
前台的主要代码是这个了
<% foreach (MyWeb.Model.Contents item in list) { %> <tr class="tr_bg"> <td align="center"><span class="checkall"><input type="checkbox" id="rptList_ctl02_cb_id"></span></td> <td align="center"><span id="rptList_ctl02_lb_id"><%= item.Id %></span></td> <td><a href="Edit.aspx?id=<%= item.Id %>"><%= item.Title %></a></td> <td align="center"></td> <td align="center"><%= item.SortId %></td> <td align="center"><span><a href="edit.aspx?id=<%= item.Id %>">修改</a></span></td> </tr> <% } %>
通过用foreach循环得到数据。
注意的是分页js
分页的div,直接复制,什么都不变
<div id="Pagination" class="right flickr"></div>
分页的js代码
<script type="text/javascript"> $(function() { //分页参数设置 $("#Pagination").pagination(<%=pcount %>, { callback: pageselectCallback, prev_text: "« 上一页", next_text: "下一页 »", items_per_page:<%=pagesize %>, num_display_entries:3, current_page:<%=page %>, num_edge_entries:2, link_to:"?page=__id__" }); }); function pageselectCallback(page_id, jq) { //alert(page_id); 回调函数,进一步使用请参阅说明文档 } </script>
分页还要引用js。
这里要说的是,贴出的并不是完整代码,只是一种思路,要完整代码可以下载源码查看
源码下载(数据库可以自动附加,不用手动附加的vs2008,sql2005)