VB.NET中如何让DevExpress SpinEdit达MaxValue时显示错误文本
ASPxSpinEdit 达到上限值时不显示错误提示的解决方法
期望实现的错误提示效果:
现有代码
前端页面控件代码:
<div class="row"> <div class="col-md-4"> <dx:ASPxSpinEdit ID="spinEditQTY" runat="server" Number="0" Width="300px" /> </div> </div>
后端VB.NET赋值代码:
If dt.Rows.Count > 0 Then spinEditQTY.MaxValue = dt.Rows(0).Item("Quantity").ToString spinEditQTY.Text = dt.Rows(0).Item("Quantity").ToString End If
问题原因
ASPxSpinEdit内置的范围校验规则默认判定:输入值落在[MinValue, MaxValue]闭区间内均为合法值,只有值超出区间边界才会抛出错误提示。现有代码把MaxValue直接设为库存最大值,用户输入等于这个值时属于合法输入,自然不会弹出错误;另外直接给MaxValue传字符串类型、初始值直接绑定为MaxValue的写法,也会干扰校验逻辑的正常触发。
具体实现步骤
- 修正后端赋值逻辑,统一做类型转换,开启控件内置校验能力
If dt.Rows.Count > 0 Then ' 先把库存值转成数值类型,避免字符串解析异常 Dim stockLimit As Decimal = Decimal.Parse(dt.Rows(0).Item("Quantity").ToString()) ' 控件允许输入的最大值设为库存+1,确保输入超库存时能触发范围校验 spinEditQTY.MaxValue = stockLimit + 1 spinEditQTY.MinValue = 0 ' 配置错误提示规则 spinEditQTY.ValidationSettings.ErrorDisplayMode = ErrorDisplayMode.Text spinEditQTY.ValidationSettings.ErrorTextPosition = ErrorTextPosition.Bottom spinEditQTY.ValidationSettings.ValidateOnInput = True ' 输入时实时校验,不需要失焦才提示 spinEditQTY.ValidationSettings.ErrorText = String.Format("输入数量不能超过最大库存{0}", stockLimit) ' 初始值设为0,不要默认赋值为库存上限 spinEditQTY.Number = 0 End If
- (可选)如果需要输入值刚好等于库存上限时也弹出提示,添加自定义校验事件
前端控件补充事件绑定:
<dx:ASPxSpinEdit ID="spinEditQTY" runat="server" Number="0" Width="300px" OnValidation="spinEditQTY_Validation"> </dx:ASPxSpinEdit>
后端补充校验逻辑:
Protected Sub spinEditQTY_Validation(sender As Object, e As ValidationEventArgs) Dim inputVal As Decimal = Convert.ToDecimal(e.Value) Dim stockLimit As Decimal = Decimal.Parse(dt.Rows(0).Item("Quantity").ToString()) ' 按自己的需求改判断条件,比如大于等于就提示就把>改成>= If inputVal > stockLimit Then e.IsValid = False e.ErrorText = String.Format("输入数量不能超过最大库存{0}", stockLimit) End If End Sub
- 不需要额外写前端样式,控件会按内置的错误样式渲染红色提示文本,和示例效果一致。
内容的提问来源于stack exchange,提问作者user19158969
相关产品推荐
相关产品推荐

