添加自定义服务器端函数验证
可能的使用场景
有时候,您可能需要在服务器端实现数据验证。Aspose.Cells.GridWeb允许您添加自定义服务器端数据验证。您必须指定单元格范围或区域。您还可以为回调设置客户端验证函数与自定义服务器端验证。
添加自定义服务器端函数验证
您需要通过GridValidation.ServerValidation属性设置实现了GridCustomServerValidation接口的服务器验证类。您还需要设置客户端验证函数(应该在客户端以JavaScript编写),这个函数是必须的,用于在回调时在客户端端验证数据。您可以通过GridValidation.ErrorMessage和GridValidation.ErrorTitle属性设置错误消息字符串和标题以满足您的需求。请查看一系列屏幕截图,展示了在执行下面的示例代码后(逐步)在给定场景中的工作方式。在示例中,您无法更新B2:C3单元格中的数据。当您尝试编辑工作表中的这些单元格时,将会提示一些错误消息,并且之前的值将被恢复。您可以打开控制台窗口(在您的浏览器中)来打印特定事件的单元格信息/细节。
示例代码
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
----------------------------------------------- | |
AddCustomServerSideFunctionValidation.aspx | |
----------------------------------------------- | |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddCustomServerSideFunctionValidation.aspx.cs" Inherits="Aspose.Cells.GridWeb.Examples.AddCustomServerSideFunctionValidation" %> | |
<%@ Register TagPrefix="acw" Namespace="Aspose.Cells.GridWeb" Assembly="Aspose.Cells.GridWeb" %> | |
<!DOCTYPE html> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head runat="server"> | |
<link rel="stylesheet" href="/Scripts/jquery-ui.css" /> | |
<script src="/Scripts/jquery-2.1.1.js"></script> | |
<script src="/Scripts/jquery-ui.js"></script> | |
<script type="text/javascript"> | |
var lastselectvalue = null; | |
var localvalue = {}; | |
function myCellSelect(cell) { | |
//Get the selected cell. | |
var value = this.getCellValueByCell(cell); | |
//Get the value to store. | |
lastselectvalue = value; | |
var key = this.acttab + "_" + this.getCellRow(cell) + "_" + this.getCellColumn(cell); | |
//Store the respective cell's value. | |
localvalue[key] = lastselectvalue; | |
console.log("OnCellSelect: value:" + value + " row:" + this.getCellRow(cell) + ",col:" + this.getCellColumn(cell)); | |
console.log("Last selected value:" + lastselectvalue); | |
} | |
function ValidationErrorClientFunctionCallback(cell, msg) { | |
//Get the error message string. | |
var errmsg1 = getattr(cell, "errmsg"); | |
//Show the error message in the client dialog. | |
alert(errmsg1); | |
//Showing an alert message where "this" refers to GridWeb | |
alert(this.id + "----> " + msg + " Previous value will be restored."); | |
$("#errmsg").text(msg); | |
console.log("Selected cell:" + " row:" + this.getCellRow(cell) + ",col:" + this.getCellColumn(cell)); | |
//Get the GridWeb. | |
var who = this; | |
//Restore to valid value/previous value. | |
who.setValid(cell); | |
var key = this.acttab + "_" + this.getCellRow(cell) + "_" + this.getCellColumn(cell); | |
lastselectvalue = localvalue[key]; | |
setInnerText(cell.children[0], lastselectvalue); | |
} | |
</script> | |
<title>Add Custom Server-side Function Validation</title> | |
</head> | |
<body> | |
<form id="form1" runat="server"> | |
<div> | |
<div> | |
<b>GridWeb Version: </b> | |
<asp:Label ID="lblVersion" runat="server" Text="Label"></asp:Label> | |
<br /> | |
<acw:GridWeb ID="GridWeb1" runat="server" OnCellSelectedClientFunction="myCellSelect" Width="44%" Height="384px" ShowLoading="true" XhtmlMode="true" | |
PresetStyle="Standard" EnableAJAX="true" EnableAsync="true" RenderHiddenRow="true" MaxColumn="15" MaxRow="21"> | |
</acw:GridWeb> | |
</div> | |
</div> | |
<span id="errmsg" style="color: red;"></span> | |
</form> | |
</body> | |
</html> | |
----------------------------------------------- | |
AddCustomServerSideFunctionValidation.aspx.cs | |
----------------------------------------------- | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using System.Web.UI; | |
using System.Web.UI.WebControls; | |
using Aspose.Cells.GridWeb; | |
using Aspose.Cells.GridWeb.Data; | |
namespace Aspose.Cells.GridWeb.Examples | |
{ | |
class MyServerValidation : GridCustomServerValidation | |
{ | |
public string Validate(GridWorksheet sheet, int row, int col, string value) | |
{ | |
if ((row == 1) || (row == 2)) | |
{ | |
return "Value Not Passed!"; | |
} | |
else | |
{ | |
return string.Empty; | |
} | |
} | |
} | |
public partial class AddCustomServerSideFunctionValidation : System.Web.UI.Page | |
{ | |
protected void Page_Load(object sender, EventArgs e) | |
{ | |
if (!IsPostBack && !this.GridWeb1.IsPostBack) | |
{ | |
lblVersion.Text = GridWeb.GetVersion(); | |
//Input values to B2:C3 cells in the active worksheet. | |
GridWeb1.ActiveSheet.Cells["B2"].PutValue("This"); | |
GridWeb1.ActiveSheet.Cells["C2"].PutValue("cannot"); | |
GridWeb1.ActiveSheet.Cells["B3"].PutValue("be"); | |
GridWeb1.ActiveSheet.Cells["C3"].PutValue("changed"); | |
//Get the validations of the active sheet. | |
var gridValidationCollection = GridWeb1.ActiveSheet.Validations; | |
//Add data validation to range/area: B2:C3 | |
GridValidation gv = gridValidationCollection.Add(new GridCellArea(1, 1, 2, 2)); | |
//Set the validation type to custom server function. | |
gv.ValidationType = GridValidationType.CustomServerFunction; | |
//Set the server validation class which implements the GridCustomServerValidation interface. | |
gv.ServerValidation = new MyServerValidation(); | |
//Set the client validation function (written in JavaScript on client-side). | |
//This function is compulsory to validate the data on client end on callback. | |
gv.ClientValidationFunction = "ValidationErrorClientFunctionCallback"; | |
//Set the error message string. | |
gv.ErrorMessage = "Error found! You cannot change this value."; | |
//Set the error title. | |
gv.ErrorTitle = "Error"; | |
} | |
} | |
} | |
} |