找回密码
 立即注册

QQ登录

只需一步,快速开始

Catsou55

初级会员

6

主题

24

帖子

368

积分

初级会员

积分
368

活字格认证

Catsou55
初级会员   /  发表于:2018-2-23 18:22  /   查看:8545  /  回复:14
[size=13.3333px]SpreadAsp.Net版Maxlength仅提供文字数check,结合InputManAsp.Net版的控件GcTextLengthValidator可以实现Byte数Check。实现方式参照一下链接:
http://docs.grapecity.com/help/spread-aspnet-8/spweb-imvalid.html

Byte数check功能可以实现,可问题是通过JS方法向Spread单元格设值不好使:
fpSpread.SetValue(row, col, "AAA", true);

将Byte数check功能GcTextLengthValidator去掉,设值就好用了。Byte数Check和js设值都是必须有的功能。各位大神谁能帮忙看看问题出在哪里,在下感激不尽!

14 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-2-24 17:58:17
沙发
检查下验证方法里是不是有问题AAA无法通过验证所以没有设置成功
回复 使用道具 举报
Catsou55
初级会员   /  发表于:2018-2-24 18:05:02
板凳
只有最大字节数100位的验证,“AAA”可以通过验证。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-2-26 09:27:12
地板
您给个可以重现问题的Demo吧,从您的描述现在找不到具体问题的原因。
回复 使用道具 举报
Catsou55
初级会员   /  发表于:2018-2-26 10:47:15
5#
下面的DEMO能再现:

<%@ Page Language="VB" Inherits="System.Web.UI.Page" %>

<!DOCTYPE html>
<script language="VB" type="text/VB" runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Request.Item("fpcallback") = "true" Then
            Return
        End If

        InitVaSpread1()
    End Sub

    Private Sub InitVaSpread1()
        vaSpread1.EditModeReplace = True
        vaSpread1.ProcessTab = True

        vaSpread1.HorizontalScrollBarPolicy = ScrollBarPolicy.Never
        vaSpread1.VerticalScrollBarPolicy = ScrollBarPolicy.Always

        vaSpread1.ActiveSheetView.DefaultRowHeight = 37

        vaSpread1.ActiveSheetView.RowCount = 3
        vaSpread1.ActiveSheetView.ColumnCount = 3

        vaSpread1.ActiveSheetView.Columns(0).Width = 119.04

        vaSpread1.ActiveSheetView.Columns(1).Width = 271.04

        vaSpread1.ActiveSheetView.Columns(2).Width = 0.0

        vaSpread1.ActiveSheetView.Columns(0).BackColor = Drawing.Color.Yellow

        vaSpread1.ActiveSheetView.Columns(1).CellType = New TextCellType With {.AllowWrap = True}

        Dim validator As New GrapeCity.Web.Input.IMValidators.GcTextLengthValidator()
        validator.ValidateOnInput = True
        validator.ErrorMessage = "Maxlength over 50 bytes"
        validator.MaximumLength = 50
        validator.LengthAsByte = True

        DirectCast(vaSpread1.ActiveSheetView.Columns(1).CellType, TextCellType).Validators.Add(validator)

        vaSpread1.ColumnHeader.Visible = False
        vaSpread1.RowHeader.Visible = False

    End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="Scripts/SpreadExtensions.js"></script>
    <script type="text/javascript">
        window.addEventListener("load", function () {
            var fpSpread = FpSpread("vaSpread1");
            fpSpread.CallBack("XXX");
            for (i = 0 ; i < 3 ; i++) {
                fpSpread.SetValue(i, 0, "AAA", true);
                fpSpread.SetValue(i, 1, "ABCDEFG", true);  //发生异常的地方
            }
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="hidden" name="VASPREAD1_CALLBACK_HREF" value="<%=Request.Url%>"/>
    <FarPoint:FpSpread ID="vaSpread1" runat="Server" BorderColor="#A0A0A0" BorderStyle="Solid" BorderWidth="1px" Height="159" Width="409" >
    <commandbar backcolor="#F6F6F6" buttonfacecolor="Control" buttonhighlightcolor="ControlLightLight" buttonshadowcolor="ControlDark"></commandbar>
    <sheets>
        <FarPoint:SheetView SheetName="Sheet1">
        </FarPoint:SheetView>
    </sheets>
</FarPoint:FpSpread>
    </div>
    </form>
</body>
</html>
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-2-26 17:42:22
6#
代码已收到,测试后给您答复
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-2-27 17:06:44
7#
您好您 fpSpread.CallBack("XXX"); 的目的是什么,注释掉这句就好了。

评分

参与人数 1满意度 +5 收起 理由
Catsou55 + 5 很给力!

查看全部评分

回复 使用道具 举报
Catsou55
初级会员   /  发表于:2018-2-28 09:19:15
8#
您好感谢您的回答。的确是 fpSpread.CallBack("XXX"); 引起的;
这句的目的是调用服务器端代码设置spread一些属性,还不能注释掉。
您看看有没有其他解决方案。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-2-28 18:17:44
9#
可以调用             fpSpread.Update()
但是实际我还是没有特别明白你的业务逻辑,既然服务端要设置一些属性,那么对Value的设置为什么不直接在服务端完成。或者页面初始化时候就设置好spread
回复 使用道具 举报
Catsou55
初级会员   /  发表于:2018-3-1 09:39:42
10#
在哪里调用fpSpread.Update() , fpSpread.CallBack("XXX")之后吗?
我做的是移行项目,现行系统用的asp页面嵌入SpreadActiveX控件,所有设置都在js里进行的;
移行后想尽量保持现有代码结构,只有js实现不了的属性会放到服务器回调。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部