<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DataGrid 数据表格</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <h2>Index</h2> <link href="../demo.css" rel="stylesheet" type="text/css" /> <script src="~/Scripts/miniui/boot.js"></script> <body> <h1>Client Pagination 客户端分页</h1> <div id="datagrid1" class="mini-datagrid" style="width:600px;height:280px;" idField="id" pageSize="10" multiSelect="true"> <div property="columns"> @*<div type="indexcolumn"></div> <div type="checkcolumn"></div> <div field="loginname" width="120" headerAlign="center" vtype="required;email" autoEscape="true" allowSort="true">员工帐号</div> <div field="age" width="100" allowSort="true">年龄</div> <div field="gender" width="100" allowSort="true" align="center" headerAlign="center">性别</div> <div field="country" width="100" headerAlign="center">国家</div>*@ <div type="checkcolumn" headeralign="center" ="center"></div> <div type="indexcolumn" headeralign="center" ="center">序号</div> <div field="d1" headeralign="center" ="center" width="80">时间</div> <div field="d2" headeralign="center" ="center" width="80">赛制</div> <div field="d3" headeralign="center" ="center" width="80">战绩</div> </div> </div> </body> <script type="text/javascript"> mini.parse(); var grid = mini.get("datagrid1"); grid.sizeList = [1,2,3,5, 10, 20, 50, 100] // 分页填充细节处理 function fillData(pageIndex, pageSize, dataResult, grid) { var data = dataResult.data, totalCount = dataResult.total; var arr = []; var start = pageIndex * pageSize, end = start + pageSize; for (var i = start, l = end; i < l; i++) { var record = data[i]; if (!record) continue; arr.push(record); } grid.setTotalCount(totalCount); grid.setPageIndex(pageIndex); grid.setPageSize(pageSize); grid.setData(arr); } // 监听分页前事件,阻止后自行设置当前数据和分页信息 grid.on("beforeload", function (e) { e.cancel = true; var pageIndex = e.data.pageIndex, pageSize = e.data.pageSize; fillData(pageIndex, pageSize, dataResult, grid); }); //////////////////////////////////////////////////////////////////////// // 获取所有数据和总记录数 { total: 100, data: [...] } var dataResult = null; $.ajax({ url: 'data.txt', dataType: 'text', async: false, success: function (text) { dataResult = mini.decode(text); } }); // 第一次设置 fillData(0, grid.getPageSize(), dataResult, grid); </script> </html>
public void JsonHtml() { ModelzhuEntities me = new ModelzhuEntities(); //使用Lamabda表达式来获取数据 //返回一个List<T>的对象来存储文章列表 List<Models.Student> list = me.Students.Where(p=>p.depID >0).ToList (); ModelHandler<Models.Student> mh = new ModelHandler<Student>(); DataTable dtm= mh.FillDataTable(list ); //使用ViewData来传递list对象 ViewData["DataList"] = list; //新建表 int sum = 10; DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn("d1", Type.GetType("System.String")); DataColumn dc2 = new DataColumn("d2", Type.GetType("System.String")); DataColumn dc3 = new DataColumn("d3", Type.GetType("System.String")); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); //循环添加数据 for (int i = 1; i < sum + 1; i++) { DataRow dr = dt.NewRow(); dr["d1"] = "2015-10-20"; dr["d2"] = "排位赛 第" + i + "场"; dr["d3"] = "10杀 0死 0助攻"; dt.Rows.Add(dr); } //设置表的页码,如果缺失,会导致数据无法显示 int pageIndex = Convert.ToInt32(Request["pageIndex"]); int pageSize = Convert.ToInt32(Request["pageSize"]); //将数据转换相应的格式 ArrayList AlData = DataTableToArrayList(dt); int index = pageIndex, size = pageSize; ArrayList data = new ArrayList(); int start = index * size, end = start + size; for (int i = 0, l = AlData.Count; i < l; i++) { Hashtable record = (Hashtable)AlData[i]; if (record == null) continue; if (start <= i && i < end) { data.Add(record); } } Hashtable result = new Hashtable(); result["data"] = data; result["total"] = sum; //输出数据和总条数 string returnOne= JsonUtil.ToJson(dtm, dtm.Rows.Count); Response.Write(returnOne); } private static ArrayList DataTableToArrayList(DataTable data) { ArrayList array = new ArrayList(); for (int i = 0; i < data.Rows.Count; i++) { DataRow row = data.Rows[i]; Hashtable record = new Hashtable(); for (int j = 0; j < data.Columns.Count; j++) { object cellValue = row[j]; if (cellValue.GetType() == typeof(DBNull)) { cellValue = null; } record[data.Columns[j].ColumnName] = cellValue; } array.Add(record); } return array; }
using System; using System.Data; using System.Configuration; using System.Collections; using System.Collections.Generic; using System.Text; using System.Web; /// <summary> ///JsonUtil 的摘要说明 /// </summary> public class JsonUtil { private JsonUtil() { } /*返回 json数组 格式为 [{name1:value1, name2:value2}] */ public static string ToJsArray(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { return "[]"; } StringBuilder _json = new StringBuilder(); _json.Append("["); for (int i = 0, lr = dt.Rows.Count; i < lr; i++) { _json.Append("{"); for (int j = 0, lc = dt.Columns.Count; j < lc; j++) { _json.Append("\""); _json.Append(ToString(dt.Columns[j].ColumnName).ToLower()); _json.Append("\":\""); _json.Append(StrReplace(ToString(dt.Rows[i][j]))); _json.Append("\""); if (j < lc - 1) { _json.Append(","); } } _json.Append("}"); if (i < lr - 1) { _json.Append(","); } } _json.Append("]"); return _json.ToString(); } /*返回 通用json 格式为 {total:0,data:[{}]}*/ public static string ToJson(DataTable dt, int total) { if (dt != null && dt.Rows.Count > 0) { StringBuilder Json = new StringBuilder(); Json.Append("{\"total\":").Append(total).Append(","); Json.Append("\"data\":["); for (int i = 0, lr = dt.Rows.Count; i < lr; i++) { Json.Append("{"); for (int j = 0, lc = dt.Columns.Count; j < lc; j++) { Json.Append("\"" + ToString(dt.Columns[j].ColumnName).ToLower() + "\":\"" + StrReplace(ToString(dt.Rows[i][j])) + "\""); if (j < lc - 1) { Json.Append(","); } } Json.Append("}"); if (i < lr - 1) { Json.Append(","); } } Json.Append("]}"); return Json.ToString(); } return "{\"total\":0,\"data\":[]}"; } //转换 json tree public static string ToJsonTree(DataTable dt, TreeAttr attr) { if (attr == null) { throw new ArgumentException("未指定节点对象属性"); } if (dt == null || dt.Rows.Count == 0) { return "[]"; } StringBuilder _json = new StringBuilder(); _json.Append("["); Hashtable _table = new Hashtable(); //散列表,用于临时存储节点对象 NodeTree _node = null; //将 datatable 转换到散列表中 for (int i = 0, l = dt.Rows.Count; i < l; i++) { _node = new NodeTree(); _node.ID = ToString(dt.Rows[i][attr.ID]); _node.Text = ToString(dt.Rows[i][attr.Text]); _node.ParentID = ToString(dt.Rows[i][attr.Pid]); _node.Children = new List<NodeTree>(); _table.Add(_node.ID, _node); } IList<NodeTree> _roots = new List<NodeTree>(); //用于存储根节点对象 foreach (object key in _table.Keys) { _node = (NodeTree)_table[key]; if (string.IsNullOrEmpty(_node.ParentID)) //如果父节点为空,则表示是根节点 { _roots.Add(_node); } else { //如果不是根节点,则找到该节点的父节点,并将该节点添加到父节点下 if (_table[_node.ParentID] != null) { ((NodeTree)_table[_node.ParentID]).AddChild(_node); } } } //遍历根节点返回 json for (int k = 0, l = _roots.Count; k < l; k++) { _json.Append(_roots[k].ToString()); if (k < l - 1) { _json.Append(","); } } _json.Append("]"); //JsonConvert.SerializeObject(_roots); return _json.ToString(); } //转换 json menu public static string ToJsonMenu(DataTable dt, MenuAttr2 attr) { if (attr == null) { throw new ArgumentException("未指定节点对象属性"); } if (dt == null || dt.Rows.Count == 0) { return "[]"; } StringBuilder _json = new StringBuilder(); _json.Append("["); Hashtable _table = new Hashtable(); //用于临时存储节点对象 IList<MenuNode2> _nodes = new List<MenuNode2>(); MenuNode2 _node = null; foreach (DataRow row in dt.Rows) { _node = new MenuNode2(); _node.ID = ToString(row[attr.Id]); _node.Pid = ToString(row[attr.ParentID]); _node.Text = ToString(row[attr.FunctionName]); _node.Url = ToString(row[attr.Url]); _node.Img = ToString(row[attr.Img]); _node.isUsed = ToInt32(row[attr.IsUsed]); _node.Sort = ToDouble(row[attr.Sort]); _node.ilevel = ToInt32(row[attr.ilevel]); _node.model = ToString(row[attr.model]); /*_node.ID = ConvertHelper.ToString(row[attr.ID]); _node.Text = ConvertHelper.ToString(row[attr.Text]); _node.Pid = ConvertHelper.ToString(row[attr.Pid]); _node.Url = ConvertHelper.ToString(row[attr.Url]); _node.IconCls = ConvertHelper.ToString(row[attr.IconCls]); _node.Shortcuts = ConvertHelper.ToString(row[attr.Shortcuts]); _node.IsBillPage = ConvertHelper.ToBoolean(row[attr.IsBillPage]); _node.ProgramID = ConvertHelper.ToInt32(row[attr.ProgramID]); */ if (_table[_node.ID] == null) { _table.Add(_node.ID, _node); _nodes.Add(_node); } } //int i = 0, total = _table.Count; //foreach (object key in _table.Keys) //{ // _json.Append(((MenuNode)_table[key]).ToString()); // if (i++ < total - 1) // { // _json.Append(","); // } //} for (int i = 0, l = _nodes.Count; i < l; i++) { _json.Append(_nodes[i].ToString()); if (i < l - 1) { _json.Append(","); } } _json.Append("]"); return _json.ToString(); } public static double ToDouble(object s) { double result = 0; if (s != null && s != DBNull.Value && !string.IsNullOrEmpty(s.ToString())) { double.TryParse(s.ToString(), out result); } return result; } /// <summary> /// 字符串转为INT32 型 /// </summary> /// <param name="s">需转换字符串</param> /// <returns>返回INT型,转换失败返回 0</returns> public static int ToInt32(object s) { int result = 0; if (s != null && s != DBNull.Value && !string.IsNullOrEmpty(s.ToString())) { if (s.ToString().Equals("True", StringComparison.CurrentCultureIgnoreCase)) result = 1; else if (s.ToString().Equals("False", StringComparison.CurrentCultureIgnoreCase)) result = 0; else int.TryParse(s.ToString(), out result); } return result; } public static string ToString(object s) { if (s == null || string.IsNullOrEmpty(s.ToString())) return string.Empty; else return s.ToString(); } //转换通用的 json格式 public static string ToCommonJson(DataTable dt) { StringBuilder _json = new StringBuilder(); _json.Append("{items:["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { _json.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { _json.Append("\"" + ToString(dt.Columns[j].ColumnName) + "\":\"" + StrReplace(ToString(dt.Rows[i][j])) + "\""); if (j < dt.Columns.Count - 1) { _json.Append(","); } } _json.Append("}"); if (i < dt.Rows.Count - 1) { _json.Append(","); } } } _json.Append("]}"); return _json.ToString(); } public static string StrReplace(string str) { str = str.Replace("\"", "\\\""); str = str.Replace("\n", ""); str = str.Replace("\r", ""); return str; } //树节点对象 private class NodeTree { public string ID { get; set; } public string Text { get; set; } public string ParentID { get; set; } public List<NodeTree> Children { get; set; } public void AddChild(NodeTree node) { Children.Add(node); } public override string ToString() { StringBuilder _json = new StringBuilder(); _json.Append("{id:\"").Append(ID).Append("\","); _json.Append("text:\"").Append(Text).Append("\""); if (Children.Count > 0) { _json.Append(",children:["); for (int i = 0, l = Children.Count; i < l; i++) { _json.Append(Children[i].ToString()); if (i < l - 1) { _json.Append(","); } } _json.Append("]"); } _json.Append("}"); return _json.ToString(); } } //菜单节点对象 private class MenuNode { public string ID { get; set; } public string Text { get; set; } public string Pid { get; set; } public string Url { get; set; } public string IconCls { get; set; } public string Shortcuts { get; set; } public bool IsBillPage { get; set; } public int ProgramID { get; set; } public override string ToString() { StringBuilder _json = new StringBuilder(); if (string.IsNullOrEmpty(Pid) || Pid == "0") { _json.Append("{id:\"").Append(ID).Append("\","); _json.Append("isbillpage:").Append(IsBillPage == true ? "true" : "false").Append(","); _json.Append("programid:").Append(ProgramID).Append(","); _json.Append("text:\"").Append(Text).Append("\"}"); } else { _json.Append("{id:\"").Append(ID).Append("\","); _json.Append("text:\"").Append(Text).Append("\","); _json.Append("pid:\"").Append(Pid).Append("\","); _json.Append("isbillpage:").Append(IsBillPage == true ? "true" : "false").Append(","); _json.Append("programid:").Append(ProgramID).Append(","); _json.Append("url:\"").Append(Url).Append("\","); _json.Append("shortcuts:\"").Append(Shortcuts).Append("\","); _json.Append("iconCls:\"").Append(IconCls).Append("\"}"); } return _json.ToString(); } } private class MenuNode2 { public string ID { get; set; } public string Text { get; set; } public string Pid { get; set; } public string Url { get; set; } public string Img { get; set; } public int isUsed { get; set; } public double Sort { get; set; } public int ilevel { get; set; } public string model { get; set; } public override string ToString() { StringBuilder _json = new StringBuilder(); if (string.IsNullOrEmpty(Pid)) { Pid = "0"; } _json.Append("{ID:\"").Append(ID).Append("\","); _json.Append("functionName:\"").Append(Text).Append("\","); _json.Append("parentID:\"").Append(Pid).Append("\","); _json.Append("url:\"").Append(Url).Append("\","); _json.Append("isUsed:").Append(isUsed).Append(","); _json.Append("sort:").Append(Sort).Append(","); _json.Append("ilevel:").Append(ilevel).Append(","); _json.Append("model:\"").Append(model).Append("\","); _json.Append("img:\"").Append(Img).Append("\"}"); return _json.ToString(); } } } public class TreeAttr { public TreeAttr(string id, string text, string pid) { this.ID = id; this.Text = text; this.Pid = pid; } public string ID { get; set; } public string Text { get; set; } public string Pid { get; set; } } public class MenuAttr { public MenuAttr(string id, string text, string pid, string url, string iconcls, string shortcuts, string isBillPage, string programid) { this.ID = id; this.Text = text; this.Pid = pid; this.Url = url; this.IconCls = iconcls; this.Shortcuts = shortcuts; this.IsBillPage = isBillPage; this.ProgramID = programid; } public string ID { get; set; } public string Text { get; set; } public string Pid { get; set; } public string Url { get; set; } public string IconCls { get; set; } public string Shortcuts { get; set; } public string IsBillPage { get; set; } public string ProgramID { get; set; } } public class MenuAttr2 { private string _id; public string Id { get { return _id; } set { _id = value; } } private string _parentID; public string ParentID { get { return _parentID; } set { _parentID = value; } } private string _functionName; public string FunctionName { get { return _functionName; } set { _functionName = value; } } private string _url; public string Url { get { return _url; } set { _url = value; } } private string _img; public string Img { get { return _img; } set { _img = value; } } private string _isUsed; public string IsUsed { get { return _isUsed; } set { _isUsed = value; } } private string _sort; public string Sort { get { return _sort; } set { _sort = value; } } private string _ilevel; public string ilevel { get { return _ilevel; } set { _ilevel = value; } } private string _model; public string model { get { return _model; } set { _model = value; } } }
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; namespace WebMvcOne { /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T">实体类</typeparam> public class ModelHandler<T> where T : new() { #region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// <param name="ds">DataSet</param> /// <returns></returns> public List<T> FillModel(DataSet ds) { if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0) { return null; } else { return FillModel(ds.Tables[0]); } } /// <summary> /// 填充对象列表:用DataSet的第index个表填充实体类 /// </summary> public List<T> FillModel(DataSet ds, int index) { if (ds == null || ds.Tables.Count <= index || ds.Tables[index].Rows.Count == 0) { return null; } else { return FillModel(ds.Tables[index]); } } /// <summary> /// 填充对象列表:用DataTable填充实体类 /// </summary> public List<T> FillModel(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { return null; } List<T> modelList = new List<T>(); foreach (DataRow dr in dt.Rows) { //T model = (T)Activator.CreateInstance(typeof(T)); T model = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName); if (propertyInfo != null && dr[i] != DBNull.Value) propertyInfo.SetValue(model, dr[i], null); } modelList.Add(model); } return modelList; } /// <summary> /// 填充对象:用DataRow填充实体类 /// </summary> public T FillModel(DataRow dr) { if (dr == null) { return default(T); } //T model = (T)Activator.CreateInstance(typeof(T)); T model = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName); if (propertyInfo != null && dr[i] != DBNull.Value) propertyInfo.SetValue(model, dr[i], null); } return model; } #endregion #region 实体类转换成DataTable /// <summary> /// 实体类转换成DataSet /// </summary> /// <param name="modelList">实体类列表</param> /// <returns></returns> public DataSet FillDataSet(List<T> modelList) { if (modelList == null || modelList.Count == 0) { return null; } else { DataSet ds = new DataSet(); ds.Tables.Add(FillDataTable(modelList)); return ds; } } /// <summary> /// 实体类转换成DataTable /// </summary> /// <param name="modelList">实体类列表</param> /// <returns></returns> public DataTable FillDataTable(List<T> modelList) { if (modelList == null || modelList.Count == 0) { return null; } DataTable dt = CreateData(modelList[0]); foreach (T model in modelList) { DataRow dataRow = dt.NewRow(); foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()) { dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null); } dt.Rows.Add(dataRow); } return dt; } /// <summary> /// 根据实体类得到表结构 /// </summary> /// <param name="model">实体类</param> /// <returns></returns> private DataTable CreateData(T model) { DataTable dataTable = new DataTable(typeof(T).Name); foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()) { dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType)); } return dataTable; } #endregion } }