<!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 } }
