新文章 网摘 文章 随笔 日记

在 ASP.NET MVC 中使用 jqGrid

 

在本文中,我们将学习如何在 ASP.NET MVC 中使用 jqGrid 以及如何使用实体框架来访问数据库。

下载源代码

下载

如果你属于ASP.NET web表单背景,那么我们使用最多的就是grid view,但是在某些场景下,如果数据量很大,那么它会被打破。但是,在 MVC 中,我们没有那种包含所有现成事件的网格,但是有 HTML 帮助程序可以帮助您在 Web 网格中生成 HTML。在那,我们需要使用不同的包来处理网格的分页,并且我们需要传递一个强类型模型来渲染网格。

现在,如果我们想要一个更轻巧且易于使用的网格,在该网格中,我们可以进行分页、搜索和创建新记录,轻松编辑记录、删除记录,那么我们将正确使用它。

jqGrid 与 ASP.NET

让我们先从数据库部分开始。

数据库部分

我创建了一个名为“Northwind”的数据库,其中包含“Customers”表。

jqGrid 与 ASP.NET

接下来,我们将创建一个 ASP.NET MVC5 Web 应用程序。

创建 ASP.NET MVC5 Web 应用程序

打开新的 Visual Studio 2015 IDE。

jqGrid 与 ASP.NET

打开 IDE 后,接下来我们将创建 MVC 项目,只需单击文件 - 在该新建 - 项目中。

jqGrid 与 ASP.NET

选择一个项目后,会弹出一个名为“New Project”的新对话框。在这里,我们将选择 Visual C# Project Templates >> Web >> ASP.NET Web Application。然后,我们将项目命名为“DemoGrids”。

jqGrid 与 ASP.NET

命名项目后,我们将点击 OK 按钮创建一个项目。

将弹出一个新对话框,用于选择创建“ASP.NET Web 应用程序”的模板;在该模板中,我们将创建 MVC 应用程序。这就是为什么我们要选择“MVC 模板”,然后单击“确定”按钮来创建一个项目。

jqGrid 与 ASP.NET

单击确定按钮后,它将开始创建一个项目。

项目结构

jqGrid 与 ASP.NET

在创建项目之后,接下来我们将创建模型。

创建客户模型

我们将把客户模型添加到模型文件夹中。

jqGrid 与 ASP.NET

 

 

[Table("Customers")]  
public class Customers  
{  
    [Key]  
    public int? CustomerID { get; set; }  
    [Required(ErrorMessage = "Required CompanyName")]  
    public string CompanyName { get; set; }  
    [Required(ErrorMessage = "Required ContactName")]  
    public string ContactName { get; set; }  
    [Required(ErrorMessage = "Required ContactTitle")]  
    public string ContactTitle { get; set; }  
    public string Address { get; set; }  
    [Required(ErrorMessage = "Required City")]  
    public string City { get; set; }  
    public string Region { get; set; }  
    [Required(ErrorMessage = "Required PostalCode")]  
    public string PostalCode { get; set; }  
    [Required(ErrorMessage = "Required Country")]  
    public string Country { get; set; }  
    [Required(ErrorMessage = "Required Phone")]  
    public string Phone { get; set; }  
    public string Fax { get; set; }  
}     

 

 

 

添加模型之后,接下来我们将使用实体框架来访问数据库,我们需要设置 DbContext 类。

注意

什么是 DbContext?

DbContext 是实体框架的重要组成部分。

它是域或实体类与数据库之间的桥梁。

DbContext 是负责与作为对象的数据进行交互的主要类。

引用自: - http://www.entityframeworktutorial.net/EntityFramework4.3/dbcontext-vs-objectcontext.aspx

设置 DbContext 类

在这一部分,我们首先要创建一个名为“DatabaseContext”的类,这个类将从“DbContext”类继承。

我们将在模型文件夹中创建这个类。

jqGrid 与 ASP.NET

注意

“DBConnection”是连接字符串名称。

注意

什么是 DBSet?

引用自: - http://www.entityframeworktutorial.net/EntityFramework4.3/dbsetclass.aspx

DBSet 类表示用于创建、读取、更新和删除操作的实体集。当实体类型在构建时未知时,可以使用 DBSet (DbSet<TEntity>) 的通用版本。

添加“DatabaseContext”类之后,接下来我们将使用“DbContext”类继承该类。

在构造函数中继承类 next 之后,我们将创建一个连接,我们需要将连接字符串名称传递给“DbContext”类,我们将连接字符串名称作为 DBConnection 传递。

在传递连接字符串之后,我们将在“DbContext”类中声明 DbSet,这将帮助我们执行创建、读取、更新和删除操作。

代码片段

 
using System.Data.Entity;  
  
namespace DemoGrids.Models  
{  
    public class DatabaseContext : DbContext  
    {  
        public DatabaseContext() : base("DBConnection")  
        {  
        }  
  
        public DbSet<Customers> Customers { get; set;}  
    }  
}  

 

Web.config 文件中的连接字符串

 

 
<connectionStrings>  
  <add name="DBConnection"   
       connectionString="Data Source=####; initial catalog=Northwind; user id=sa; password=Pass####;"  
       providerName="System.Data.SqlClient" />  
</connectionStrings>  

 

在设置 DbContext 类之后,接下来我们将从 NuGet 包中添加 jQuery.jqGrid 包。

 

从 NuGet 包添加 jQuery.jqGrid

要从 NuGet 包中添加 jQuery.jqGrid 引用,只需右键单击项目,将填充一个列表,只需选择“管理 NuGet 包”,就会弹出 NuGet 的新对话框,其中有带有搜索的浏览选项,只需搜索 jQuery.jqGrid 和搜索结果选择“jQuery.jqGrid”包并点击安装按钮,这个包将添加jqGrid网格所需的CSS和jQuery文件。

jqGrid 与 ASP.NET

下面是安装 jqGrid 后的项目结构,其中显示 jqGrid 网格引用已添加到 Content 和 Scripts 文件夹中。

jqGrid 与 ASP.NET

接下来,我们将添加一个控制器。

添加演示控制器

在这一部分,我们将添加一个名为“Demo”的控制器。

jqGrid 与 ASP.NET

接下来,在添加 Controller 之后,我们将获得一个名为 Index 的 Default Action 方法,我们将添加这个 View 用于显示 Grid,同时我们需要添加另一个 Action 方法来处理 Ajax Get Request for Getting Data 并绑定它到网格。

添加操作方法 GetCustomer

此操作方法将返回将数据绑定到网格所需的 JSON 对象。

添加 GetCustomers 操作方法,该方法将采用少量参数作为处理输入(排序、分页和在网格中搜索)。

 

 
  1. //获取待办事项列表。    
  2.  public  JsonResult GetCustomers(string word,  int  page,  int  rows, string searchString)   
  3.  {  
  4.      //#1 创建用于访问数据库的DatabaseContext 类的实例。  
  5.      使用 (DatabaseContext db =  new  DatabaseContext())  
  6.      {  
  7.          //#2 设置分页  
  8.          int  pageIndex = Convert.ToInt32(page) - 1;  
  9.          int  pageSize = 行;  
  10.   
  11.          //#3 Linq 查询以获取客户   
  12.          var 结果 = db.Customers.Select(  
  13.              a =>   
  14.              {  
  15.                  a.客户ID,  
  16.                  a.公司名称,  
  17.                  a.联系人姓名,  
  18.                  a.联系方式,  
  19.                  一座城市,  
  20.                  a.邮政编码,  
  21.                  一个国家,  
  22.                  一部手机,  
  23.              });  
  24.            
  25.          //#4 获取总行数  
  26.          int  totalRecords = Results.Count();  
  27.          var  totalPages = ( int )Math.Ceiling(( float )totalRecords / ( float )rows);  
  28.   
  29.          //#5 设置排序  
  30.          if  (sord.ToUpper() ==  "DESC" )  
  31.          {  
  32.              结果 = Results.OrderByDescending(s => s.CustomerID);  
  33.              结果 = Results.Skip(pageIndex * pageSize).Take(pageSize);  
  34.          }  
  35.          别的  
  36.          {  
  37.              结果 = Results.OrderBy(s => s.CustomerID);  
  38.              结果 = Results.Skip(pageIndex * pageSize).Take(pageSize);  
  39.          }  
  40.          //#6 设置搜索  
  41.          如果 (!string.IsNullOrEmpty(searchString))  
  42.          {  
  43.              结果 = Results.Where(m => m.Country == searchString);  
  44.          }  
  45.          //#7 发送 Json 对象以查看。  
  46.          var  jsonData =   
  47.          {  
  48.              总 = 总页数,  
  49.              页,  
  50.              记录数 = 总记录数,  
  51.              行 = 结果  
  52.          };  
  53.          返回 Json(jsonData, JsonRequestBehavior.AllowGet);  
  54.      }  
  55.  }  

 

理解代码片段。

  1. 第一步,我们将创建用于访问数据库的 DatabaseContext 实例。
  2. 第二步根据我们从请求中收到的参数设置页面索引。
  3. 第三步,我们将编写用于从数据库中获取数据的 Linq 查询,我们将其以 IQueryable 形式存储在 Result 变量中。
  4. 第四步,我们将计算需要将其发送到 View 的 Total Records 和 Total Pages。
  5. 第五步设置排序顺序。
  6. 六步设置搜索网格。
  7. 在这一步的最后一步,我们将收集所有变量并将它们以 JSON 格式发送到 View。

在添加和理解 GetCustomer Action Method 之后,接下来我们将添加 View for Index Action Method,这是在创建 Controller 时默认创建的。

将索引视图添加到索引操作方法

在这一部分,我们将添加索引视图。

jqGrid 与 ASP.NET

添加索引视图后的项目结构。

jqGrid 与 ASP.NET

接下来,我们将向索引视图添加 jqGrid 脚本和 CSS 引用。

 

将 jqGrid 的脚本和 CSS 引用添加到索引视图

在这一步中,我们将向索引视图添加 jqGrid 脚本和 CSS 引用。

 

当我们从 NuGet 包中添加 jqGrid Grid 时,此脚本被添加到项目中。

 
  1. <link href= "~/Content/themes/base/jquery-ui.css"  rel= "stylesheet"  />  
  2. <link href= "~/Content/jquery.jqGrid/ui.jqgrid.css"  rel= "stylesheet"  />  
  3. <script src= "~/Scripts/jquery-1.10.2.min.js" ></script>  
  4. <script src= "~/Scripts/jquery-ui-1.10.0.js" ></script>  
  5. <script src= "~/Scripts/i18n/grid.locale-en.js" ></script>  
  6. <script src= "~/Scripts/jquery.jqGrid.min.js" ></script>  

添加空 <table> 元素

添加 Scripts 和 Css 之后,接下来我们需要添加 table 元素以保留应创建网格的位置。

 

 
  1. <table id= "Demogrid" ></table>  

下一步,我们将显示带有客户列的简单网格。

创建 jqGrid

在这一部分,我们将编写一个脚本来创建 JqGrid 并调用操作方法“GetCustomers”来获取要绑定到网格的数据。

代码片段

 
  1. <脚本>  
  2.         $(函数 () {  
  3.             调试器;  
  4.             $( "#Demogrid" ).jqGrid  
  5.             ({  
  6.                 url:  "/Demo/GetCustomers" ,  
  7.                 数据类型:  'json' ,  
  8.                 mtype:  '获取' ,  
  9.                 //表头名称  
  10.                 colNames: [ 'CustomerID' ,  'CompanyName' ,  'ContactName' ,   
  11. 'ContactTitle' ,  'City' ,   'PostalCode' ,  'Country' ,  'Phone' ],  
  12.                 //colModel 从控制器获取数据并绑定到网格  
  13.                 颜色型号:[  
  14.                 {名称:  “客户ID”  },  
  15.                 {名称:  “公司名称”  },  
  16.                 {名称:  “联系人姓名”  },  
  17.                 {名称:  “联系人标题”  },  
  18.                 {名称:  “城市”  },  
  19.                 {名称:  “邮政编码”  },  
  20.                 {名称:  “国家”  },  
  21.                 {名称:  “电话”  }  
  22.                 ],  
  23.                 高度:  '100%' ,  
  24.                 行数:10,    
  25.                 查看记录:  true ,  
  26.                 标题:  'JQgrid 演示' ,  
  27.                 emptyrecords:  '没有记录' ,  
  28.                 jsonReader:  
  29.                 {  
  30.                     根:  “行” ,  
  31.                     页面:  “页面” ,  
  32.                     总计:  “总计” ,  
  33.                     记录:  “记录” ,  
  34.                     重复项: ,  
  35.                     编号:  “0”  
  36.                 },  
  37.                 自动宽度: ,  
  38.             });  
  39.         });  
  40.     </脚本>  

 

 

 

 

JqG​​rid 选项

引用自 - http://www.trirand.com/jqgridwiki/doku.php?id=wiki:first_grid

财产 描述
网址 告诉我们从哪里获取数据。通常这是一个服务器端函数,它连接到一个数据库,该函数返回要填充到网格中的 Body 层的适当信息
数据类型 这告诉 jqGrid 返回的信息类型,以便它可以构建网格。在这种情况下,我们告诉网格我们希望从服务器返回 XML 数据,但其他格式也是可能的。有关所有可用数据类型的列表,请参阅 API 方法
类型 告诉我们如何进行 Ajax 调用:'GET' 或 'POST'。在这种情况下,我们将使用 GET 方法从服务器检索数据
列名 我们在其中放置列名称的数组。这是出现在网格头部(Header 层)的文本。名称以逗号分隔
模型 描述列模型的数组。这是网格中最重要的部分。这里我只解释上面使用的选项。有关选项的完整列表,请参阅 colModel API
name:列的名称。这个名称不一定是数据库表的名称,但稍后我们将看到当我们有不同的数据格式时如何使用它。
index:传递给对数据进行排序的服务器的名称(请注意,我们可以改为传递列号)。通常,这是数据库的名称(或多个名称)——这是服务器端排序,因此您传递的内容取决于您的服务器期望接收的内容。
width:列的宽度,以像素为单位。
align:列的对齐方式。
sortable:指定网格中的数据是否可以在此列上排序;如果为 false,则单击标题无效。
寻呼机 定义我们要使用分页栏来浏览记录。这必须是一个有效的 HTML 元素;在我们的示例中,我们为 div 指定了“pager”的 id,但任何名称都是可以接受的。请注意,导航层(“pager” div)可以放置在您想要的任何位置,由您的 HTML 决定;在我们的示例中,我们指定分页器将出现在 Body 层之后。
行数 设置我们要在网格中查看的记录数。此参数传递给 URL 以供检索数据的服务器例程使用
行列表 在寻呼机中构造选择框元素的数组,我们可以在其中更改可见行的数量。在执行期间更改时,此参数将替换传递给 URL 的 rowNum 参数
排序名称 设置初始排序列。可以是姓名或号码。此参数添加到 URL 以供服务器例程使用
查看记录 定义我们是否要在分页栏中显示来自查询的总记录数
标题 设置网格的标题。如果未设置此参数,则字幕层将不可见

 

在设置用于创建 JqGrid 的脚本之后,接下来我们将保存并运行应用程序以首先查看网格的外观。

 

 

 

 

 

 

 

 

 

 

JqG​​rid
添加分页器快照
jqGrid 与 ASP.NET

现在在网格上方,我们可以看到我们只能看到 10 行,但是我们看不到这个网格的分页器,让我们启用对这个网格的分页,以便我们可以在其中显示大量数据。

  1. 添加带有 id pager 的分页元素 <div>。
     
    1. <div id= "pager" ></div>  

添加 pager 元素以查看下一步后,我们需要向 JqGrid 添加更多选项。

 
  1. 寻呼机:jQuery( '#pager' ),  
  2. 行列表:[10, 20, 30, 40],  

 

代码片段

 
  1. <脚本>  
  2.         $(函数 () {  
  3.             调试器;  
  4.             $( "#Demogrid" ).jqGrid  
  5.             ({  
  6.                 url:  "/Demo/GetCustomers" ,  
  7.                 数据类型:  'json' ,  
  8.                 mtype:  '获取' ,  
  9.                 //表头名称  
  10.                 colNames: [ 'CustomerID' ,  'CompanyName' ,  'ContactName' ,  'ContactTitle' ,  'City' ,  'PostalCode' ,  'Country' ,  'Phone' ],  
  11.                 //colModel 从控制器获取数据并绑定到网格  
  12.                 颜色型号:[  
  13.                 {名称:  “客户ID”  },  
  14.                 {名称:  “公司名称”  },  
  15.                 {名称:  “联系人姓名”  },  
  16.                 {名称:  “联系人标题”  },  
  17.                 {名称:  “城市”  },  
  18.                 {名称:  “邮政编码”  },  
  19.                 {名称:  “国家”  },  
  20.                 {名称:  “电话”  }  
  21.                 ],  
  22.                 高度:  '100%' ,  
  23.                 查看记录:  true ,  
  24.                 标题:  'JQgrid 演示' ,  
  25.                 emptyrecords:  '没有记录' ,  
  26.                 行数:10,  
  27.   
  28.                 寻呼机:jQuery( '#pager' ),  
  29.                 行列表:[10, 20, 30, 40],  
  30.   
  31.                 jsonReader:  
  32.                 {  
  33.                     根:  “行” ,  
  34.                     页面:  “页面” ,  
  35.                     总计:  “总计” ,  
  36.                     记录:  “记录” ,  
  37.                     重复项: ,  
  38.                     编号:  “0”  
  39.                 },  
  40.                 自动宽度: ,  
  41.             });  
  42.         });  
  43.     </脚本>  



jqGrid 与 ASP.NET

将分页下拉列表从 10 更改为 20 后JqG​​rid调试视图的快照


JqG​​rid 的调试视图快照添加分页后,接下来我们需要添加用于创建新客户、编辑客户、删除客户的图标以及我们需要搜索此网格。
jqGrid 与 ASP.NET



jqGrid 与 ASP.NET

向网格寻呼机添加编辑、创建、删除和搜索图标

在这一部分中,我们将向网格的寻呼机添加创建、编辑、删除和搜索图标,为此我们需要在网格上设置几个选项。

这些选项很容易设置,因为它们只理解布尔值 true 或 false。

如果我们只想显示添加图标,那么只需制作 {add: true} 并隐藏它只需制作 {add: false}。

 
  1. .navGrid( '#pager' ,  
  2. {  
  3.     编辑: 真的,  
  4.     添加: 真实,  
  5.     德尔: 真的,  
  6.     搜索: ,  
  7.     刷新: ,  
  8.     closeAfterSearch:   
  9. }  

代码片段

 
  1. <脚本>  
  2.         $(函数 () {  
  3.             调试器;  
  4.             $( "#Demogrid" ).jqGrid  
  5.             ({  
  6.                 url:  "/Demo/GetCustomers" ,  
  7.                 数据类型:  'json' ,  
  8.                 mtype:  '获取' ,  
  9.                 //表头名称  
  10.                 colNames: [ 'CustomerID' ,  'CompanyName' ,  'ContactName' ,  'ContactTitle' ,  'City' ,  'PostalCode' ,  'Country' ,  'Phone' ],  
  11.                 //colModel 从控制器获取数据并绑定到网格  
  12.                 颜色型号:[  
  13.                 {名称:  “客户ID”  },  
  14.                 {名称:  “公司名称”  },  
  15.                 {名称:  “联系人姓名”  },  
  16.                 {名称:  “联系人标题”  },  
  17.                 {名称:  “城市”  },  
  18.                 {名称:  “邮政编码”  },  
  19.                 {名称:  “国家”  },  
  20.                 {名称:  “电话”  }  
  21.                 ],  
  22.                 高度:  '100%' ,  
  23.                 查看记录:  true ,  
  24.                 标题:  'JQgrid 演示' ,  
  25.                 emptyrecords:  '没有记录' ,  
  26.                 行数:10,  
  27.   
  28.                 寻呼机:jQuery( '#pager' ),  
  29.                 行列表:[10, 20, 30, 40],  
  30.   
  31.                 jsonReader:  
  32.                 {  
  33.                     根:  “行” ,  
  34.                     页面:  “页面” ,  
  35.                     总计:  “总计” ,  
  36.                     记录:  “记录” ,  
  37.                     重复项: ,  
  38.                     编号:  “0”  
  39.                 },  
  40.                 自动宽度: ,  
  41.             }).navGrid( '#pager' ,  
  42.             {  
  43.                 编辑: 真的,  
  44.                 添加: 真实,  
  45.                 德尔: 真的,  
  46.                 搜索: ,  
  47.                 刷新: ,  
  48.                 closeAfterSearch:   
  49.             });  
  50.         });  
  51.     </脚本>  

JqG​​rid 快照

jqGrid 与 ASP.NET

完成添加图标后,现在让我们研究如何使用 JqGrid 添加新客户。

添加新客户

为了首先添加新客户,我们需要添加处理创建新客户请求的操作方法。

为此,我们将添加名为“CreateCustomer”的新 Action 方法,它将客户模型作为输入参数。

在这个方法中,我们首先要验证我们将从 Ajax 请求接收的数据是否有效,然后我们将在实体框架的帮助下将该数据保存到数据库中,最后,我们将返回响应给 Ajax方法。如果数据无效,那么我们将读取 ModelState 中的错误,该错误将作为对 Ajax 方法的响应发送。

代码片段

 

 
  1. [HttpPost]  
  2.     public  JsonResult CreateCustomer([Bind(Exclude =  "CustomerID" )] 客户客户)  
  3.     {  
  4.         StringBuilder msg =  new  StringBuilder();  
  5.         尝试  
  6.         {  
  7.             如果 (模型状态。IsValid)  
  8.             {  
  9.                 使用 (DatabaseContext db =  new  DatabaseContext())  
  10.                 {  
  11.                     db.Customers.Add(customers);  
  12.                     db.SaveChanges();  
  13.                     return  Json( "保存成功" , JsonRequestBehavior.AllowGet);  
  14.                 }  
  15.             }  
  16.             别的  
  17.             {  
  18.                 VAR  errorList =(从项目  的ModelState  
  19.                                  其中 item.Value.Errors.Any()  
  20.                                  选择 item.Value.Errors[0].ErrorMessage).ToList();  
  21.   
  22.                 返回 Json(errorList, JsonRequestBehavior.AllowGet);  
  23.             }  
  24.         }  
  25.         捕获 (异常前)  
  26.         {  
  27.             var  errormessage =  "发生错误:"  + ex.Message;  
  28.             返回 Json(errormessage, JsonRequestBehavior.AllowGet);  
  29.         }  
  30.   
  31.     }  

 

在添加将处理发布请求的新操作方法之后,我们需要向 jqGrid 添加选项,它将使用 CreateCustomer 操作方法发布此请求。

用于创建新客户的 JqGrid 代码片段

 
  1. {  
  2.     // 添加选项  
  3.     zIndex: 100,  
  4.     url:  "/Demo/CreateCustomer" ,  
  5.     closeOnEscape: ,  
  6.     closeAfterAdd:  true ,  
  7.     afterComplete: 函数 (响应){  
  8.         如果 (响应.responseJSON)  
  9.         {  
  10.             if  (response.responseJSON ==  "保存成功" ) {  
  11.                 alert( "保存成功" );  
  12.             }  
  13.             其他 {  
  14.                 无功 消息=  “” ;  
  15.                 for  ( var  i = 0; i < response.responseJSON.length; i++) {  
  16.                     消息 += response.responseJSON[i];  
  17.                     消息 +=  "\n" ;  
  18.                 }  
  19.             }  
  20.               
  21.         }  
  22.     }  
  23. }  

添加此选项后,我们将不会看到用于创建新客户的 create customer 弹出窗口,我们需要将 {editable: true} 添加到每个 colModel 属性。

添加可编辑的代码片段:对 colModel 属性为 true

 
  1. 颜色型号:   
  2. [  
  3.   
  4. { name:  "CustomerID" , editable:  true  },  
  5. {  
  6.     名称:  “公司名称” ,可编辑:  true  
  7. },  
  8. {  
  9.     名称:  'ContactName' ,可编辑:  true  
  10. },  
  11. {  
  12.     名称:  “ContactTitle” ,可编辑:  true  
  13. },  
  14. {  
  15.     名称:  “城市” ,可编辑:  true  
  16. },  
  17. {  
  18.     名称:  “邮政编码” ,可编辑:  true  
  19. },  
  20. {  
  21.     名称:  “国家” ,可编辑:  true  
  22. },  
  23. {  
  24.     名称:  “电话” ,可编辑:  true  
  25. }  
  26. ],  

将可编辑选项设置为 true 后,列将仅在添加记录弹出窗口中可见。

JqG​​rid 的快照

jqGrid 与 ASP.NET

但是我们到现在还没有向这个字段添加任何验证。

让我们向这个字段添加验证。

添加验证(必需)

我们需要添加的第一件事是使所有字段都为必填项。

为此,我们需要向 colModel 添加一个编辑规则选项。

编辑规则:{必需:真实}

注意: - 编辑规则

此选项向可编辑元素添加其他属性,应在 colModel 中使用。大多数情况下,它用于在将值提交给服务器之前验证用户输入。

引用自 - http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules

 

 
  1. 颜色型号:[  
  2. {  
  3.     名称:  “CustomerID” ,可编辑:  true  
  4. },  
  5. {  
  6.     name:  "CompanyName" , editable:  true , editrules: { required:  true  }  
  7. },  
  8. {  
  9.     name:  'ContactName' , editable:  true , editrules: { required:  true  }  
  10. },  
  11. {  
  12.     名称:  “ContactTitle” ,可编辑:true ,编辑 规则:{required:  true  }  
  13. },  
  14. {  
  15.     name:  "City" , editable:  true , editrules: { required:  true  }  
  16. },  
  17. {  
  18.     名称:  “PostalCode” ,可编辑:true ,编辑 规则:{required:  true  }  
  19. },  
  20. {  
  21.     名称:  “国家” ,可编辑:,编辑 规则:{ 要求:  }  
  22. },  
  23. {  
  24.     名称:  “电话” ,可编辑:true ,编辑 规则:{required:  true  }  
  25. }  
  26. ],  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JqG​​rid 的快照

jqGrid 与 ASP.NET

在将所有字段设为必填之后,接下来我们需要一些验证,例如文本框应该只接受整数值作为输入,这样做我们只需要向该列添加另一个选项。

代码片段

 
  1. {  
  2.      名称:  “PostalCode” ,可编辑:true ,编辑 规则:{required:  true ,number:  true }  
  3. }  

jqGrid 与 ASP.NET

引用自 - http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules

以下是可用选项列表:

选项 类型 描述
编辑隐藏 布尔值 此选项仅在表单编辑模块中有效。默认情况下,隐藏字段不可编辑。如果该字段在网格中隐藏并且 edithidden 设置为 true,则在调用 add 或 edit 方法时可以编辑该字段。
必需的 布尔值 (真或假)如果设置为真,将检查该值,如果为空,将显示错误消息。
数字 布尔值 (真或假)如果设置为真,将检查该值,如果这不是数字,将显示错误消息。
整数 布尔值 (真或假)如果设置为真,将检查该值,如果这不是整数,将显示错误消息。
最小值 数字(整数) 如果设置,将检查该值,如果该值小于此值,将显示错误消息。
最大值 数字(整数) 如果设置,将检查该值,如果该值大于此值,将显示错误消息。
电子邮件 布尔值 如果设置为 true,将检查该值,如果这不是有效的电子邮件,将显示错误消息
网址 布尔值 如果设置为 true,将检查该值,如果这不是有效的 url,将显示错误消息
日期 布尔值 如果设置为 true,则获取 datefmt 选项中的值(如果未设置,则使用 ISO 日期)并且将检查该值,如果这不是有效日期,则会显示错误消息
时间 布尔值 如果设置为 true,则将检查该值,如果这不是有效时间,则会显示错误消息。目前,我们只支持 hh:mm 格式和可选的 am/pm 结尾
风俗 布尔值 如果设置为 true 允许通过自定义函数定义自定义检查规则。见下文
custom_func 功能 当自定义选项设置为 true 时,应使用此函数。传递给这个函数的参数是值,它应该被检查和名称 - colModel 的属性。该函数应返回一个带有以下参数的数组:第一个参数 - true 或 false。true 的值表示检查成功 false 否则;第二个参数只有在第一个值为 false 时才有意义,并且表示将向用户显示的错误消息。通常,这看起来像这样 [false,“请输入有效值”]

 

在接下来查看验证之后,我们最终将创建一个新客户。

jqGrid 与 ASP.NET

发布数据后,下面是模型中填充的值的快照。

JqG​​rid 快照

jqGrid 与 ASP.NET

完成添加新客户之后,我们将要编辑客户。

 

编辑/更新客户详细信息

首先要编辑记录,我们需要添加处理编辑请求的操作方法。

在下面的代码片段中,我们将客户模型作为输入,然后我们将验证模型并更新数据库中的值。

如果我们无法更新,那么我们将显示警报消息。

代码片段

 
  1. 公共 字符串 EditCustomer(Customers 客户)  
  2. {  
  3.     字符串味精;  
  4.     尝试  
  5.     {  
  6.         如果 (模型状态。IsValid)  
  7.         {  
  8.             使用 (DatabaseContext db =  new  DatabaseContext())  
  9.             {  
  10.                 db.Entry(customers).State = EntityState.Modified;  
  11.                 db.SaveChanges();  
  12.                 msg =  "保存成功" ;  
  13.             }  
  14.         }  
  15.         别的  
  16.         {  
  17.             msg =  "一些验证" ;  
  18.         }  
  19.     }  
  20.     捕获 (异常前)  
  21.     {  
  22.         msg =  "发生错误:"  + ex.Message;  
  23.     }  
  24.      消息;  
  25. }  

 

 

 

 

 

代码片段

要启用编辑/更新选项,我们需要将这段代码添加到 JqGrid。

 
  1. {  
  2.     // 编辑选项  
  3.     zIndex: 100,  
  4.     url:  '/Demo/EditCustomer' ,  
  5.     closeOnEscape: ,  
  6.     closeAfterEdit:  true ,  
  7.     recreateForm:  true ,  
  8.     afterComplete: 函数 (响应)  
  9.     {  
  10.         如果 (响应。响应文本)  
  11.         {  
  12.             警报(响应。响应文本);  
  13.         }  
  14.     }  
  15. },  

 

为了更新和删除数据,我们需要唯一的 ID。

在 jqGrid 中,我们可以通过设置 Key: true 来标记唯一 id。

代码片段

 
  1. 颜色型号:[  
  2. {  
  3.     name:  '客户 ID' ,  
  4.     可编辑:  true ,  
  5.     关键: 真的,  
  6.     隐藏: 真实  
  7. },  

要首先编辑记录,我们需要选择一行,然后我们需要单击编辑图标。

jqGrid 与 ASP.NET

选择一行并单击编辑图标后,将显示一个弹出窗口,其中包含您选择进行编辑的记录。

在这里,我们将更改电话号码并单击提交按钮以更新记录,为了更新数据,它将调用 EditCustomer Action 方法。

jqGrid 与 ASP.NET

以下是更新客户数据时的调试视图。

调试视图
更新数据后的输出完成编辑客户下一步后,我们将删除记录。
jqGrid 与 ASP.NET



jqGrid 与 ASP.NET

删除客户

首先要删除记录,我们需要添加处理删除请求的操作方法。

下面是处理删除请求的代码片段,该请求以 Id (CustomerID) 作为输入。

 
  1. 公共 字符串 DeleteCustomer( int  Id)  
  2. {  
  3.     使用 (DatabaseContext db =  new  DatabaseContext())  
  4.     {  
  5.         客户客户 = db.Customers.Find(Id);  
  6.         db.Customers.Remove(客户);  
  7.         db.SaveChanges();  
  8.         return "删除成功" ;   
  9.     }  
  10. }  

要启用删除选项,我们需要将这段代码添加到 JqGrid。

 
  1. {  
  2.     // 删除选项  
  3.     zIndex: 100,  
  4.     url:  "/Demo/DeleteCustomer" ,  
  5.     closeOnEscape: ,  
  6.     closeAfterDelete:  true ,  
  7.     recreateForm:  true ,  
  8.     msg:  "您确定要删除此客户吗?" ,  
  9.     afterComplete: 函数 (响应){  
  10.         如果 (响应。响应文本){  
  11.             警报(响应。响应文本);  
  12.         }  
  13.     }  
  14. }  

 

以类似的方式删除记录,首先我们需要选择一行,然后我们需要单击删除图标。

jqGrid 与 ASP.NET

删除确认消息

jqGrid 与 ASP.NET

如果单击删除按钮,它将调用 DeleteCustomer 操作方法。对于删除,我们需要唯一的 id,即 CustomerID,当我们点击删除按钮时会填充它,因为我们已将 CustomerID 列设置为 JqGrid 中的 Key。

调试视图
删除记录后的确认最后,我们已经完成了大部分操作,但仍有一个待处理的操作是搜索选项。
jqGrid 与 ASP.NET



jqGrid 与 ASP.NET

 

 

 

搜索客户

要启用搜索,我们需要做的第一件事是在寻呼机上启用搜索。

为此,我们需要在寻呼机中启用 {search: true}。

调试视图

 
  1. .navGrid( '#pager' ,  
  2. {  
  3.     编辑: 真的,  
  4.     添加: 真实,  
  5.     德尔: 真的,  
  6.     搜索: ,  
  7.     刷新: ,  
  8.     closeAfterSearch:   
  9. },  

之后,启用此选项,您可以在网格页脚中看到搜索图标。

jqGrid 与 ASP.NET

但这里的一个问题是,当您单击编辑搜索时,它会在第一个下拉列表中显示所有列名称。

jqGrid 与 ASP.NET

但是我们想在特定的列上进行搜索,我们需要为每一列设置 {search} 选项,如果我们想启用该列的搜索然后设置 {search: true} 并禁用搜索然后设置 {search: false} .

我们将启用仅搜索 2 列 [CompanyName, ContactName]

代码片段

 
  1. 颜色型号:[  
  2. {  
  3.     name:  '客户 ID' ,  
  4.     可编辑:  true ,  
  5.     关键: 真的,  
  6.     隐藏: 真实,  
  7.     搜索:   
  8. },  
  9. {  
  10.     name:  "CompanyName" , editable:  true , editrules: { required:  true  }, search:  true  
  11. },  
  12. {  
  13.     name:  'ContactName' , editable:  true , editrules: { required:  true  }, search:  true  
  14. },  
  15. {  
  16.     名称:  “ContactTitle” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  17. },  
  18. {  
  19.     name:  "City" , editable:  true , editrules: { required:  true  }, search:  false  
  20. },  
  21. {  
  22.     名称:  “PostalCode” ,可编辑:true ,编辑 规则:{ required:  true ,number:  true  },搜索:  false  
  23. },  
  24. {  
  25.     名称:  “国家” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  26. },  
  27. {  
  28.     名称:  “电话” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  29. }  
  30. ],  

 

jqGrid 与 ASP.NET

接下来我们将按 CompanyName 搜索记录。

jqGrid 与 ASP.NET

当我们搜索的时候,接下来会调用GetCustomers Action 方法。

在 GetCustomers Action Method 中有一个 searchString 参数,它填充了我们搜索的数据。

调试GetCustomers Action 方法

jqGrid 与 ASP.NET

jqGrid 与 ASP.NET

最后,我们来看一下Index View 的完整代码。

索引视图的完整代码片段

 
  1. @{  
  2.     布局 = ;  
  3. }  
  4.   
  5. <!DOCTYPE html>  
  6.   
  7. <html>  
  8. <头>  
  9.     <meta name= "viewport"  content= "width=device-width"  />  
  10.     <title>索引</title>  
  11.     <link href= "~/Content/themes/base/jquery-ui.css"  rel= "stylesheet"  />  
  12.     <link href= "~/Content/jquery.jqGrid/ui.jqgrid.css"  rel= "stylesheet"  />  
  13.   
  14.     <script src= "~/Scripts/jquery-1.10.2.min.js" ></script>  
  15.     <script src= "~/Scripts/jquery-ui-1.10.0.js" ></script>  
  16.     <script src= "~/Scripts/i18n/grid.locale-en.js" ></script>  
  17.     <script src= "~/Scripts/jquery.jqGrid.min.js" ></script>  
  18.   
  19.     <脚本>  
  20.         $(函数 ()   
  21.         {  
  22.             $( "#Demogrid" ).jqGrid  
  23.             ({  
  24.                 url:  "/Demo/GetCustomers" ,  
  25.                 数据类型:  'json' ,  
  26.                 mtype:  '获取' ,  
  27.                 //表头名称  
  28.                 colNames: [ 'CustomerID' ,  'CompanyName' ,  'ContactName' ,  'ContactTitle' ,  'City' ,  'PostalCode' ,  'Country' ,  'Phone' ],  
  29.                 //colModel 从控制器获取数据并绑定到网格  
  30.                 颜色型号:[  
  31.                 {  
  32.                     name:  '客户 ID' ,  
  33.                     可编辑:  true ,  
  34.                     关键: 真的,  
  35.                     隐藏: 真实,  
  36.                     搜索:   
  37.                 },  
  38.                 {  
  39.                     name:  "CompanyName" , editable:  true , editrules: { required:  true  }, search:  true  
  40.                 },  
  41.                 {  
  42.                     name:  'ContactName' , editable:  true , editrules: { required:  true  }, search:  true  
  43.                 },  
  44.                 {  
  45.                     名称:  “ContactTitle” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  46.                 },  
  47.                 {  
  48.                     name:  "City" , editable:  true , editrules: { required:  true  }, search:  false  
  49.                 },  
  50.                 {  
  51.                     名称:  “PostalCode” ,可编辑:true ,编辑 规则:{ required:  true ,number:  true  },搜索:  false  
  52.                 },  
  53.                 {  
  54.                     名称:  “国家” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  55.                 },  
  56.                 {  
  57.                     名称:  “电话” ,可编辑:true ,编辑 规则:{required:  true  },搜索:  false  
  58.                 }  
  59.                 ],  
  60.                 高度:  '100%' ,  
  61.                 查看记录:  true ,  
  62.                 标题:  'JQgrid 演示' ,  
  63.                 emptyrecords:  '没有记录' ,  
  64.                 行数:10,  
  65.   
  66.                 寻呼机:jQuery( '#pager' ),  
  67.                 行列表:[10, 20, 30, 40],  
  68.   
  69.                 jsonReader:  
  70.                 {  
  71.                     根:  “行” ,  
  72.                     页面:  “页面” ,  
  73.                     总计:  “总计” ,  
  74.                     记录:  “记录” ,  
  75.                     重复项: ,  
  76.                     编号:  “0”  
  77.                 },  
  78.                 自动宽度:   
  79.             }).navGrid( '#pager' ,  
  80.             {  
  81.                 编辑: 真的,  
  82.                 添加: 真实,  
  83.                 德尔: 真的,  
  84.                 搜索: ,  
  85.                 刷新: ,  
  86.                 closeAfterSearch:   
  87.             },  
  88.             {  
  89.                 // 编辑选项  
  90.                 zIndex: 100,  
  91.                 url:  '/Demo/EditCustomer' ,  
  92.                 closeOnEscape: ,  
  93.                 closeAfterEdit:  true ,  
  94.                 recreateForm:  true ,  
  95.                 afterComplete: 函数 (响应)  
  96.                 {  
  97.                     如果 (响应。响应文本)  
  98.                     {  
  99.                         警报(响应。响应文本);  
  100.                     }  
  101.                 }  
  102.             },  
  103.             {  
  104.                 // 添加选项  
  105.                 zIndex: 100,  
  106.                 url:  "/Demo/CreateCustomer" ,  
  107.                 closeOnEscape: ,  
  108.                 closeAfterAdd:  true ,  
  109.                 afterComplete: 函数 (响应){  
  110.                     如果 (响应.responseJSON)  
  111.                     {  
  112.                         if  (response.responseJSON ==  "保存成功" ) {  
  113.                             alert( "保存成功" );  
  114.                         }  
  115.                         其他 {  
  116.                             无功 消息=  “” ;  
  117.                             for  ( var  i = 0; i < response.responseJSON.length; i++) {  
  118.                                 消息 += response.responseJSON[i];  
  119.                                 消息 +=  "\n" ;  
  120.                             }  
  121.                         }  
  122.                           
  123.                     }  
  124.                 }  
  125.             },  
  126.             {  
  127.                 // 删除选项  
  128.                 zIndex: 100,  
  129.                 url:  "/Demo/DeleteCustomer" ,  
  130.                 closeOnEscape: ,  
  131.                 closeAfterDelete:  true ,  
  132.                 recreateForm:  true ,  
  133.                 msg:  "您确定要删除此客户吗?" ,  
  134.                 afterComplete: 函数 (响应){  
  135.                     如果 (响应。响应文本){  
  136.                         警报(响应。响应文本);  
  137.                     }  
  138.                 }  
  139.             }  
  140.   
  141.             );  
  142.         });  
  143.     </脚本>  
  144. </头>  
  145. <身体>  
  146.     <div>  
  147.         <table id= "Demogrid" ></table>  
  148.         <div id= "pager" ></div>  
  149.     </div>  
  150. </正文>  
  151. </html>  

 

哇,终于我们完成了如何在 ASP.NET MVC 中使用 JqGrid。

源代码和数据库脚本可供下载。

 

 

 

 

posted @ 2021-08-11 08:31  岭南春  阅读(86)  评论(0)    收藏  举报