You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# DataGridView中空文本框及整数字段验证问题

C# DataGridView 产品添加弹窗字段验证修复方案

原代码问题分析

  1. 逻辑倒置:原代码仅在所有文本字段为空时才验证规则,完全不符合需求——无论文本字段是否为空,都要对每个字段按规则独立验证
  2. 整数字段验证错误:
    • 笔误:playtime、status的判断错误引用了Math.Abs(plist.price)
    • 未处理可空整数场景:直接用!= Math.Abs()判断,若字段是null会引发逻辑错误
  3. 文本字段验证覆盖不全:原代码的判断条件导致只要有一个文本字段为空就进入验证,但实际每个文本字段都要单独检查(非空时不能含数字)

明确验证规则

  • 文本字段(type、name、author、genre、format、language、platform):允许为空;非空时,不能包含任何数字字符
  • 整数字段(id、price、playtime、status):允许为空;非空时,必须是正整数(值>0)

重构代码示例

假设plist的整数字段为int?(可空值类型),文本字段为string:

bool isValid = true;

// 验证文本字段:非空时不能包含数字
if (!string.IsNullOrEmpty(plist.type) && plist.type.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.name) && plist.name.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.author) && plist.author.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.genre) && plist.genre.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.format) && plist.format.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.language) && plist.language.Any(char.IsDigit)) isValid = false;
if (!string.IsNullOrEmpty(plist.platform) && plist.platform.Any(char.IsDigit)) isValid = false;

// 验证可空整数字段:有值时必须是正整数
if (plist.id.HasValue && plist.id.Value <= 0) isValid = false;
if (plist.price.HasValue && plist.price.Value <= 0) isValid = false;
if (plist.playtime.HasValue && plist.playtime.Value <= 0) isValid = false;
if (plist.status.HasValue && plist.status.Value <= 0) isValid = false;

// 根据验证结果设置弹窗返回值
DialogResult = isValid ? DialogResult.OK : DialogResult.No;

代码说明

  1. 独立验证逻辑:每个字段单独检查,互不干扰,完全覆盖“部分为空”的场景
  2. 可空整数处理:用HasValue判断是否有值,有值时再校验正整数规则,完美支持空值需求
  3. 文本字段处理:用string.IsNullOrEmpty()判断空值,非空时才检查数字,符合规则要求
  4. 简化逻辑:先批量验证所有规则,最后统一设置返回值,避免嵌套逻辑导致的混乱

如果你的整数字段是普通int(用0表示空值),只需调整整数验证逻辑:

// 假设用0表示空值,验证逻辑改为:
if (plist.id != 0 && plist.id <= 0) isValid = false;
// 其他整数字段同理

内容的提问来源于stack exchange,提问作者Abel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:24