如何使用C#,ASP.NET,SQL Server端处理实现jQuery DataTables插件?

如何使用C#,ASP.NET,使用ajax和webservices进行SQL Server端处理来实现jQuery DataTables插件?

想使用c#和ASP.NET实现Datatables网格,但很难找到一个有效的例子。

此版本适用于较旧的SqlServer,对于较新版本,请尝试另一个版本。

此技术使用存储过程,您可以通过使用除#temp主要function之外的其他方法来提高性能

  • 存储过程
  • 注入免费且易于适应的sql结构
  • 阿贾克斯

function性和非常有用

第1步:(HTML)

    
# Name Base Discount Additional Discount Special Discount Action
# Name Base Discount Additional Discount Special Discount Action

步骤:2(存储过程)

 Create procedure [dbo].[category_post] @srno int=null, -- from here @user_srno int=null, @catSrno int=null, @name varchar(200)=null, @baseDiscount numeric(18,2)=null, @additionalDiscount numeric(18,2)=null, @specialDiscount numeric(18,2)=null, @status int null, @Action_by int null, @option varchar(20) = null, -- to here personnel parameters @orderColumn int =null, @orderDir varchar(20)=null, @start int =null, @limit int =null, @searchKey varchar(20) -- personnel parameter as BEGIN select IDENTITY(int,1,1) as SnoID, null as abc,specialDiscount, additionalDiscount, baseDiscount, name,cast(srno as varchar(20)) as srno --this method is userful for all sql server version (it can be made better by using fetch) into #tempCategory from categoryStd where [status] not in(4,14) and categoryStd.name like '%'+@searchKey+'%' declare @to as int = @start+@limit select * from #tempCategory where SnoID>@start and SnoID<=@to order by CASE WHEN @orderColumn = 1 AND @orderdir = 'desc' THEN #tempCategory.[name] END DESC, CASE WHEN @orderColumn = 1 AND @orderdir = 'asc' THEN #tempCategory.[name] END ASC, CASE WHEN @orderColumn = 2 AND @orderdir = 'desc' THEN #tempCategory.[name] END DESC, CASE WHEN @orderColumn = 2 AND @orderdir = 'asc' THEN #tempCategory.[name] END ASC select count(*) from #tempCategory END 

STEP:3(AJAX页面)C#表单

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Configuration; using AppBlock; using System.Data.SqlClient; using Newtonsoft.Json; namespace alfest.Ajax { public partial class Category : System.Web.UI.Page { string mode, option, user, limit, start, searchKey, orderByColumn, orderByDir, estMstSrno, pnlsrno, draw, jsonString; CommonClass cmnCls = new CommonClass(); protected void Page_Load(object sender, EventArgs e) { mode = Request.QueryString["mode"] == null ? "" : Request.QueryString["mode"].ToString(); option = Request.QueryString["option"] == null ? "" : Request.QueryString["option"].ToString(); limit = Request.QueryString["length"] == null ? "" : Request.QueryString["length"].ToString(); start = Request.QueryString["start"] == null ? "" : Request.QueryString["start"].ToString(); user = Request.QueryString["user"] == null ? "" : Request.QueryString["user"].ToString(); searchKey = Request.QueryString["search[value]"] == null ? "" : Request.QueryString["search[value]"].ToString(); orderByColumn = Request.QueryString["order[0][column]"] == null ? "" : Request.QueryString["order[0][column]"].ToString(); orderByDir = Request.QueryString["order[0][dir]"] == null ? "" : Request.QueryString["order[0][dir]"].ToString(); estMstSrno = Request.QueryString["estMstSrno"] == null ? "" : Request.QueryString["estMstSrno"].ToString(); pnlsrno = Request.QueryString["pnlsrno"] == null ? "" : Request.QueryString["pnlsrno"].ToString(); draw = Request.QueryString["draw"] == null ? "" : Request.QueryString["draw"].ToString(); // Cls_Category CatgObj = new Cls_Category(); // CatgObj.orderColumn = Convert.ToInt32(orderByColumn); // CatgObj.limit = Convert.ToInt32(limit); // CatgObj.orderDir = orderByDir; // CatgObj.start = Convert.ToInt32(start); // CatgObj.searchKey = searchKey; // CatgObj.option = "GetAllAdminCategory"; // or user your own method to get data (just fill the dataset) // DataSet ds = cmnCls.PRC_category(CatgObj); dynamic newtonresult = new { status = "success", draw = Convert.ToInt32(draw == "" ? "0" : draw), recordsTotal = ds.Tables[1].Rows[0][0], recordsFiltered = ds.Tables[1].Rows[0][0], data = ds.Tables[0] }; jsonString = JsonConvert.SerializeObject(newtonresult); Response.Clear(); Response.ContentType = "application/json"; Response.Write(jsonString); } } } 

最后结果 : 在此处输入图像描述

JQuery DataTables在C#,ASP.NET,SQL Server端处理中使用ajax和webservices的工作示例。

http://jquerydatatablessamp.codeplex.com/

https://github.com/benni12/jquerydatatablesExample

(发布了两次以便让想要找到它的人更容易)

通过链接到DataTables.Net开始,Allan使用这个插件做了一个了不起的工作。

我一直在使用这个插件大约一年。 当我第一次尝试使用服务器端处理,ajax和webservices在C#和.NET中实现它时,几乎没有文档和工作示例,所以我决定将它们放在一起。

提供的源代码是Visual Studio 2012(在Ultimate 2012和Pro 2012中测试)网站项目。 我把它作为一个简单的工作实例汇总在一起,希望能帮助其他人试图将这样的东西放在一起。 这是我希望我一年前拥有的东西。

数据库mdf包含在App_Data文件夹中。 我目前正在运行MS SQL Server Express 2012的实例。

必需安装SQL Server Express 2012或MS SQL Server的其他标准或更好的完整版安装。 在标准2008 R2和2012 Express上测试。

在MVC,entity framework,具有最新获取偏移分页的存储过程中的实现

第1步 – HTML

 
# Name Base Discount Additional Discount Special Discount Action
# Name Base Discount Additional Discount Special Discount Action
@* *@

第2步 – C#

 using EmployeeTrackingSystemAndMIS.Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Web.Mvc; namespace EmployeeTrackingSystemAndMIS.Controllers { public class ClientController : Controller { private EmployeeTrackingSystemAndMISEntities db = new EmployeeTrackingSystemAndMISEntities(); public string SearchMis() { string limit, start, searchKey, orderColumn, orderDir, draw, jsonString; limit = Request.QueryString["length"] == null ? "" : Request.QueryString["length"].ToString(); start = Request.QueryString["start"] == null ? "" : Request.QueryString["start"].ToString(); searchKey = Request.QueryString["search[value]"] == null ? "" : Request.QueryString["search[value]"].ToString(); orderColumn = Request.QueryString["order[0][column]"] == null ? "" : Request.QueryString["order[0][column]"].ToString(); orderDir = Request.QueryString["order[0][dir]"] == null ? "" : Request.QueryString["order[0][dir]"].ToString(); draw = Request.QueryString["draw"] == null ? "" : Request.QueryString["draw"].ToString(); var parameter = new List(); var param = new SqlParameter("@orderColumn", orderColumn); parameter.Add(param); param = new SqlParameter("@limit", limit); parameter.Add(param); param = new SqlParameter("@orderDir", orderDir); parameter.Add(param); param = new SqlParameter("@start", start); parameter.Add(param); param = new SqlParameter("@searchKey", searchKey); parameter.Add(param); var CompanySearchList = db.Database.SqlQuery("EXEC SearchCompany @orderColumn,@limit,@orderDir,@start,@searchKey ", parameter.ToArray()).ToList(); dynamic newtonresult = new { status = "success", draw = Convert.ToInt32(draw == "" ? "0" : draw), recordsTotal = CompanySearchList.FirstOrDefault().TotalCount, recordsFiltered = CompanySearchList.FirstOrDefault().TotalCount, data = CompanySearchList }; jsonString = JsonConvert.SerializeObject(newtonresult); return jsonString; } private class CompanySearch { public int TotalCount { get; set; } public string abc { get; set; } public string Address { get; set; } public int? ClientID { get; set; } public int? EmployeeID { get; set; } public string name { get; set; } public int CompanyID { get; set; } } } } 

第3步 – 存储过程

 USE [EmployeeTrackingSystemAndMIS] GO /****** Object: StoredProcedure [dbo].[category_post] Script Date: 22-02-2017 10:57:48 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO alter procedure [dbo].SearchCompany @orderColumn int , @limit int, @orderDir varchar(20), @start int, @searchKey varchar(20) as BEGIN declare @to as int = @start+@limit select TotalCount = COUNT(c.CompanyID) OVER(), null as abc,c.Address,c.ClientID ,c.EmployeeID , name, c.CompanyID from CompanyTbl c where c.Name like '%'+@searchKey+'%' order by CASE WHEN @orderColumn = 1 AND @orderdir = 'desc' THEN c.[name] END DESC, CASE WHEN @orderColumn = 1 AND @orderdir = 'asc' THEN c.[name] END ASC, CASE WHEN @orderColumn = 2 AND @orderdir = 'desc' THEN c.[name] END DESC, CASE WHEN @orderColumn = 2 AND @orderdir = 'asc' THEN c.[name] END ASC OFFSET @start ROWS FETCH NEXT @to ROWS ONLY End