用于 asp.net 和 asp.net mvc 的 jquery javascript ajax grid






4.70/5 (19投票s)
使用 javascript 和 asp.net 实现轻松、免费、快速的 ajax 网格
引言
我知道我们开发人员在开发时遇到的问题,尤其是在显示记录列表时,客户需要排序、搜索、过滤等等。为了解决这个问题,我创建了自己的基于 javascript 的 ajax 网格,可以轻松集成到 asp.net 和 asp.net MVC 应用程序中。
有哪些优势?
- 易于集成
- 非常快(使用 100 万条记录测试)。
- 没有外部 DLL。
- 纯 Javascript。
- 搜索选项
- 排序
- Ajax 分页
为了实现这一点,我将向您展示逐步的代码及其执行过程,并附带一些图像和详细信息。
背景
我们需要什么?
我使用纯 javascript 和 jquery ajax 函数创建了这个脚本,所以您必须获取 jquery 版本 1.4 或更高版本的引用。我将附上 CSS 和其他图像文件,所以您无需担心。现在我将向您展示我们将如何实现代码。
使用代码
第一步:为了实现这一点,请执行下面提到的必要步骤。创建数据库 Grid。创建表公司以及列表的存储过程。请执行下面提到的脚本。
////Execute below script////////// create database Grid create table company ( companyid int identity(1,1) primary key, companyname nvarchar(50), companyemail nvarchar(100), companywebsite nvarchar(250) ) Create Listing Procedure: USE [Grid] GO /****** Object: StoredProcedure [dbo].[select_company_listing] Script Date: 17-08-2014 12:55:57 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE procedure [dbo].[select_company_listing] ( @companyname nvarchar(50), @companyemail nvarchar(100), @companywebsite nvarchar(250), @FromPage int=0, @ToPage int=0, @intTotal int output ) as declare @strsql nvarchar(4000) declare @strCountsql nvarchar(1000) declare @xx int set @xx = 0 begin set @strsql = ‘With CompanyEntities As ( Select ROW_NUMBER() Over (Order By companyname) As Row,companyid,companyname,companyemail,companywebsite FROM Company WHERE 1=1 ‘ if @companyname <> ” begin set @strsql= @strsql + ‘ and companyname like ”%’+ @companyname + ‘%” ‘ end if @companyemail <> ” begin set @strsql= @strsql + ‘ and companyemail like ”%’+ @companyemail + ‘%” ‘ end if @companywebsite <> ” begin set @strsql= @strsql + ‘ and companywebsite like ”%’+ @companywebsite + ‘%” ‘ end set @strsql= @strsql + ‘ )’ set @strsql= @strsql + ‘Select companyid,companyname,companyemail,companywebsite From CompanyEntities Where’ set @strsql= @strsql + ‘ Row Between ‘ + convert(varchar,@FromPage) + ‘ AND ‘ + convert(varchar,@ToPage) + ‘ Order By Row Asc ‘ CREATE TABLE #TempLocal (ct int); set @strCountsql = ‘ INSERT INTO #TempLocal (ct) SELECT count(companyid) FROM Company WHERE 1=1 ‘ if @companyname <> ” begin set @strCountsql= @strCountsql + ‘ and companyname like ”%’+ @companyname + ‘%” ‘ end if @companyemail <> ” begin set @strCountsql= @strCountsql + ‘ and companyemail like ”%’+ @companyemail + ‘%” ‘ end if @companywebsite <> ” begin set @strCountsql= @strCountsql + ‘ and companywebsite like ”%’+ @companywebsite + ‘%” ‘ end –print @strCountsql exec(@strsql) exec (@strCountsql) SELECT @intTotal=ct FROM #TempLocal; DROP TABLE #TempLocal; end Insert Records: \\\\\\\\\\\\\Insert Records\\\\\\\\\\\\\\\\\\\\ DECLARE @CT INT SET @CT = 1 WHILE @CT <> 1000001 BEGIN INSERT INTO company (companyname ,companyemail ,companywebsite) VALUES (‘A’ + CONVERT(varchar,@CT) ,’A’ + CONVERT(varchar,@CT) + ‘@test.com’ ,’A’ + CONVERT(varchar,@CT) + ‘website.com’) SET @CT = @CT + 1 END
现在数据库已准备就绪,所以我们现在要创建一个网站。请按照以下步骤操作。
创建数据库后,您需要在 Visual Studio 中创建一个网站。
打开 Visual Studio –> 文件 — > 新建 –> 网站
选择语言 C#。
创建脚本文件夹并在其中添加 commongrid.js 文件。
请将以下代码复制到 commongrid.js 文件中。在此文件中,我们将创建 javascript 函数,该函数将接受 ajax 请求并生成动态 ajax 网格。这是一个很长的代码,所以先放着,稍后我会向您解释哪个函数会做什么。
这是一个三层架构的示例应用程序,我们将创建 BusinessLogic 文件夹、DataAccess 文件夹来处理业务逻辑和数据库相关的操作。
在继续之前,我们将创建一个名为 BusinessLogic 的文件夹。 在其中,我们将创建一个名为 BLCompany.cs 的文件,在其中我们将提到所有数据库列的属性,如下所示。
private int _companyid; private string _companyname; private string _companyemail; private string _companywebsite; public int ID { get { return _companyid; } set { _companyid = value; } } public string companyname { get { return _companyname; } set { _companyname = value.Replace("'", "''"); } } public string companyemail { get { return _companyemail; } set { _companyemail = value.Replace("'", "''"); } } public string companywebsite { get { return _companywebsite; } set { _companywebsite = value.Replace("'", "''"); } }
然后,我们将创建 DataAccess 文件夹来调用存储过程并返回数据集。我这里没有描述大量的代码,只是给出了一个概述,因为一旦您找到示例应用程序,您就可以轻松地获得整个想法。我只会展示如何调用和生成 ajax 网格。
现在我们已经准备好了我们的业务逻辑和数据访问层。现在我们将创建一个中间页面,ajax 请求将在其中处理。为了实现这一点,创建一个名为 ajax 的文件夹。 在其中创建名为 GetCompanyList.aspx 的页面。 此页面将处理来自网格将填充的页面的请求。此页面将接受请求并将 html 返回给 ajax 调用。
我们将在该页面中执行的两个主要方法如下所示
// Dataset will receive the data by calling business logic function
// ds = objdoc.SelectCompanyList();
//
// Pager class where html paging will be populate.
// GetPagging(objdoc.Total, Convert.ToInt32(ConfigurationManager.AppSettings["ListingPageSize"]), strpath, pageno);
//
现在我们已经完成了这一步,并移动到我们的网格将填充的主页面。
创建 Grid.aspx 页面。 添加 jquery 1.4 或更高版本的引用。 示例中附带了 Css 和图像。 添加 commongrid.js 和 validate.js 文件作为引用。
在 HTML 中
<input id="gridcurrentPage" value="1" style="display: none;" />
This hidden page will help ajax to handle current page.
<div id="dvgridpaging"></div> \\Ajax request will populate paging in this div.
<div id="dvgrid" class="grid-overflow"></div> \\ Ajax request will populate html grid in this div.
请将以下 html 粘贴到您的 grid.aspx 页面。
<div id="disablingDiv"></div> <div id="divloading" style="position: absolute; display: none;"> <img src='css/images/loading.gif' alt='loading' /> </div> <div class="g12"> <h1>Company List</h1> <input id="gridcurrentPage" value="1" style="display: none;" /> <div id="dvgridpaging"></div> <div id="dvgrid" class="grid-overflow"></div> </div> <script type="text/javascript" src="scripts/validate.js" language="javascript"></script> <script type="text/javascript" src="scripts/commongrid.js" language="javascript"></script> <script type="text/javascript" language="javascript"> var g_columns = ['Name', 'Email', 'Website']; var g_columns_sorting = ['1', '1', '1', '1', '1', '1', '1', '1']; var g_columns_width = ['30%', '35%', '35%']; var g_columns_search = ['1', '1', '1']; var pagesize = '<%=ConfigurationManager.AppSettings["ListingPageSize"]%>'; var requestURL = "Ajax/GetCompanyList.aspx?grid=1&"; var db_schema_name = ['companyname', 'companyemail', 'companywebsite']; var p = readCookie('currentpage') if (p) { if (p != "") { document.getElementById("gridcurrentPage").value = p; } } var x = readCookie('where') if (x) { if (x != "") { CreateDynamicGrid(g_columns, g_columns_sorting, g_columns_width, g_columns_search, pagesize, requestURL, db_schema_name, '', '', x); } else { CreateDynamicGrid(g_columns, g_columns_sorting, g_columns_width, g_columns_search, pagesize, requestURL, db_schema_name, '', '', ''); } } else { CreateDynamicGrid(g_columns, g_columns_sorting, g_columns_width, g_columns_search, pagesize, requestURL, db_schema_name, '', '', ''); } eraseCookie("column"); eraseCookie("order"); eraseCookie("details"); </script>
完成....容易吧?... 是的,现在一旦页面加载,它将调用 CreateDynamicGrid 函数,该函数位于 commongrid.js 文件中。就这些了,commongrid.js 文件将调用 GetCompanyList.aspx 文件,该文件位于 ajax 文件夹中,它将返回网格,该网格将填充在 <div id="dvgrid" class="grid-overflow"></div> 标签中。
关注点
我为什么写这个?当我的客户希望在每一列和网格顶部都有搜索功能时。我在谷歌上搜索过,但没有找到,所以产生了创建简单网格的想法,并创建了它,分享就是关怀,所以为什么我不能帮助别人....所以分享了....快乐编码....