原帖地址:http://www.cnblogs.com/lucky_hu/archive/2013/06/07/3123172.html
刷微博已经成为大家的一种生活方式,我今天要介绍的功能就很类似刷微博。
当我们需要将大数据(比如百万条数据)显示在页面上的时候,显然一次加载是不现实的,用户体验很差。当然,你可能会想到采用分也显示,但是现在的用户已经
厌倦了分页的方式,他们更喜欢刷微博的方式。
于是就出现了这篇文章。
笔者近期的项目中,采用的前端框架是ExtJs,其提供的GridPanel足以应付一次性加载500+以上的记录,只是会让用户等待一会。
但是日志的显示没那么简单,其数据一直在增加,用户也不想分页查看,而是用传统的GridPanel也不太适合。
Google之后,原来ExtJs已经提供了一个插件(Ext.ux.grid.livegrid),强大的Extjs啊!
据说ExtJs 4 提供了一个更加好用的插件来替代这个插件,由于时间关系,笔者仅仅使用了ext 2.2 和 ext 3.3.1两个版本的,效果还不错,
惯例先上图
笔者测试八百万条数据,只需要等待1秒左右,当然那是首次加载的速度。而且我们不是一次加载的。
上代码吧,
这里使用的是Extjs2.2版本,笔者也用了3.3.1的版本,貌似还要简洁很多,但是demo在公司。
Views:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<!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 runat="server">
<title>Index</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link rel="Stylesheet" type="text/css" href="../../Scripts/Ext/resources/css/ext-all.css" />
<link rel="Stylesheet" type="text/css" href="../../Scripts/Ext/resources/css/ext-ux-livegrid.css" />
<link href="../../Content/css.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../../Scripts/Ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/ext-all.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/GridPanel.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/GridView.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/RowSelectionModel.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/Store.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/Toolbar.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/JsonReader.js"></script>
<script type="text/javascript" src="../../Scripts/Ext/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="../../Scripts/js/grid.js"></script>
<script src="../../Scripts/js/CHelper.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
Ext.onReady(function () {
Ext.BLANK_IMAGE_URL = 'Ext/resources/images/default/tree/s.gif';
showMe();
});
</script>
</head>
<body>
<div id="content">
</div>
</body>
</html>
Controllers:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LiveGrid.Models;
namespace LiveGrid.Controllers
{
public class DefaultController : Controller
{
//
// GET: /Default/
public ActionResult Index()
{
return View();
}
#region 获取LiveGrid Data
/// <summary>
/// 获取LiveGrid Data
/// </summary>
/// <returns></returns>
public JsonResult GetLiveGridData()
{
var starts = null == Request["starts"] ? "0" : Request["starts"];
var limits = null == Request["limits"] ? "300" : Request["limits"];
var oLiveGridData = GetLiveData(int.Parse(starts),int.Parse(limits));
return Json(oLiveGridData,JsonRequestBehavior.AllowGet);
}
#endregion
#region 获取LiveGridData对象
/// <summary>
/// 获取LiveGridData对象
/// </summary>
/// <param name="starts"></param>
/// <param name="limits"></param>
/// <returns></returns>
public CLiveGridData GetLiveData(int starts, int limits)
{
var oLiveGridData = new CLiveGridData();
//总数据
var lstData = GetLstData();
//分页数据
var lstNeedData = GetLstDataByWhere(lstData,starts,limits);
oLiveGridData.totalCount = lstData.Count;
oLiveGridData.success = true;
oLiveGridData.error = string.Empty;
oLiveGridData.singleInfo = string.Empty;
var oData = new List<Dictionary<string, string>>();
foreach(var oPerson in lstNeedData)
{
var dicPerson = new Dictionary<string, string>();
dicPerson.Add("coname", oPerson.coname);
dicPerson.Add("coarea", oPerson.coarea);
dicPerson.Add("phonenumber", oPerson.phonenumber);
oData.Add(dicPerson);
}
oLiveGridData.data = oData;
return oLiveGridData;
}
#endregion
#region 构造数据
/// <summary>
/// 构造数据
/// </summary>
/// <returns></returns>
public List<CDataModel> GetLstData()
{
var lstData = new List<CDataModel>();
for (var iIndex = 0; iIndex < 8000000;iIndex++ )
{
var oDataModel = new CDataModel();
oDataModel.coname = string.Format("{0}{1}","LuckyHu",iIndex);
oDataModel.coarea = "ChengDu";
oDataModel.phonenumber = "1878028****";
lstData.Add(oDataModel);
}
return lstData;
}
#endregion
#region 获取分页数据
/// <summary>
/// 获取分页数据
/// </summary>
/// <param name="lstData"></param>
/// <param name="starts"></param>
/// <param name="limits"></param>
/// <returns></returns>
public List<CDataModel> GetLstDataByWhere(List<CDataModel> lstData, int starts, int limits)
{
var lsNeedData = new List<CDataModel>();
var iMax = starts + limits;
for (var iIndex = starts; iIndex < iMax;iIndex++ )
{
lsNeedData.Add(lstData[iIndex]);
}
return lsNeedData;
}
#endregion
}
}
为了适配不同的表结构的数据,笔者设计了一个类,适配该控件
Models
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LiveGrid.Models
{
public class CLiveGridData
{
public int totalCount;
public bool success;
public string error;
public string singleInfo;
//public List<CDataModel> data;
public List<Dictionary<string, string>> data;
}
public class CDataModel
{
public string coname;
public string coarea;
public string phonenumber;
}
}
优化的地方还多,呵呵 感谢前辈 OoLaLa 提供的参考http://www.cnblogs.com/xuchongyao/archive/2009/11/29/1612886.html
demo下班在弄上去,先上班去了!!!
本文链接
分享到:
相关推荐
ExtJS4.1+MVC4+Spring.NET1.3+EF5 整合项目数据库(pdm、sql及sqlite数据库) 原文地址:http://blog.csdn.net/xz2001/article/details/8723266
ExtJS4 + ASP.NET MVC Demo是一个结合了前端ExtJS4框架和后端ASP.NET MVC架构的应用示例,展示了如何在Web开发中实现数据操作的增删改查功能,并且利用了ExtJS4的MVC模式来提高代码的组织性和可维护性。这个Demo还...
这个框架结合了JavaScript库ExtJS的前端交互性和ASP.NET的强大后端处理能力,提供了丰富的用户界面和高效的服务器端功能。 ExtJS是一个流行的JavaScript框架,它提供了大量的可重用组件,如表格、图表、树形视图、...
**ExtJs+ASP.NET MVC 实例详解** 在现代Web应用开发中,前端界面的交互性和动态性变得越来越重要。`ExtJs`是一个强大的JavaScript框架,它提供了丰富的组件库和强大的数据管理功能,使得构建复杂的用户界面变得简单...
在"ExtJs+ASP.NET+MVC"的集成开发中,主要涉及以下几个关键知识点: 1. **ExtJS UI组件**:ExtJS 提供了大量的预定义UI组件,如表格(Grid)、面板(Panel)、表单(Form)、树形结构(Tree)等,这些组件都支持...
在这个项目中,"shopping1.5"可能是示例应用程序的名称,它可能是一个电子商务平台的实现,演示了如何使用ExtJS创建前端界面,Spring MVC处理业务逻辑,Hibernate进行数据持久化,以及MySQL存储数据。这个例子对于...
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列文档 包含 6 个文档,以及4个demo ,以及包含一个NMG-2.1Nhibernate生成工具,可以生成实体对应的实体类以及对应的.hbm.xml类. 案例来自<博客园>孤独侠客(似水流年) 的 ...
ExtJS4.1+MVC3+Spring.NET1.3+EF5 整合项目用到的数据库 原文地址: http://blog.csdn.net/xz2001/article/details/8716541 注:该数据库是20130411日修改后的。
在"extjs在ASP.NET MVC4的使用"这个主题中,我们主要关注的是如何在MVC4项目中集成和利用ExtJS的功能。以下是一些关键知识点: 1. **创建ASP.NET MVC4项目**:首先,我们需要创建一个新的ASP.NET MVC4项目。在...
本例采用ASP.NET MVC3 +EXTJS4 MVC 框架,完美实现了EXTJS4动态加载JS文件,对ASP.NET MVC3及EXTJS4 MVC 各应用要点进行了应用。对于想采用ASP.NET MVC3 +EXTJS4 MVC 框架的学习者有很好的帮助,快速掌握MVC框架,本...
标题中的"Spring.Net+NHibernate+Asp.Net MVC+ExtJS"揭示了四个关键技术的集成,这四个技术分别是Spring.NET、NHibernate、Asp.Net MVC和ExtJS。下面将详细阐述这四个技术及其在实际应用中的重要性。 **Spring.NET*...
ExtJS4.1+ASP.NET MVC3+Spring.NET1.3+EF5+SQLite 整合源码,本人整合多日,也算来之不易,需要的可以下载。 原文地址:http://blog.csdn.net/xz2001/article/details/8716541 涉及到以下框架:ExtJS4.1、MVC3、...
ASP.NET MVC4 中整合 NHibernate3.3、Spring.NET2.0、ExtJS4 整合笔记,原文地址:http://blog.csdn.net/xz2001/article/details/8452196
在本文中,我们将探讨如何利用ExtJS和ASP.NET来实现在服务器端进行长时间操作时,向用户展示一个实时更新的进度条,从而提升用户体验。这一技术对于那些需要处理大量数据或执行复杂计算的Web应用程序至关重要。 ...
ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8完成的后台管理项目,觉得是值得参考的实用项目 下载链接
在本项目中,我们主要探讨如何使用ExtJS5、Spring.NET和MVC技术来构建一个高效、可扩展的Web应用程序。这些技术都是现代Web开发中的关键组件,它们各自提供了丰富的功能,结合使用可以构建出复杂的企业级应用。 ...
总的来说,EXTJS+LINQ+MVC的组合提供了强大的前后端开发能力,EXTJS实现了丰富的用户界面,LINQ简化了数据处理,而MVC模式则保证了代码的清晰结构。这种技术栈适合开发大型、数据驱动的Web应用程序,能够满足复杂的...
ExtJS与.NET结合开发实例ExtJS与.NET结合开发实例
总的来说,"extjs+asp.net后台管理系统页面"是一个综合运用前端和后端技术的实例,它结合了ExtJS的强大UI能力和ASP.NET的服务器端功能,为开发者提供了一个高效、易用的后台管理解决方案。通过学习和实践此类项目,...
ASP.NET MVC5与ExtJS6是两种用于构建Web应用程序的技术,它们在开发高效、功能丰富的用户界面方面都有着显著的优势。ASP.NET MVC5是微软提供的一个框架,它基于Model-View-Controller(MVC)设计模式,用于构建可...