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