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

DataGridView输入验证:限制数字长度,阻止无效修改并提示

解决DataGridView emp_number列输入长度验证问题

先分析你的代码存在的几个潜在问题:

  • 未验证输入是否为纯数字,若用户输入非数字字符,长度判断逻辑会失效
  • 仅设置e.Cancel = true可能无法让单元格恢复到修改前的状态,导致无效值残留
  • 未明确处理空输入的情况(根据需求可补充对应逻辑)

以下是修正后的完整代码:

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    // 确认当前编辑的是emp_number列
    if (dataGridView1.Columns["emp_number"].Index == e.ColumnIndex)
    {
        string input = e.FormattedValue.ToString().Trim();
        
        // 处理空输入(若不允许空值可保留此逻辑,否则删除)
        if (string.IsNullOrEmpty(input))
        {
            MessageBox.Show("员工编号不能为空");
            e.Cancel = true;
            return;
        }

        // 验证输入是否为纯数字
        if (!long.TryParse(input, out _))
        {
            MessageBox.Show("员工编号必须为数字");
            e.Cancel = true;
            return;
        }

        // 验证数字长度
        if (input.Length < 7)
        {
            MessageBox.Show("员工编号长度不能少于7位");
            e.Cancel = true;
            // 取消编辑,恢复单元格原始值
            dataGridView1.CancelEdit();
        }
        // 长度≥7时自动允许修改,无需额外处理
    }
}

关键修正说明:

  • 添加纯数字验证,确保输入符合需求中的"数字"要求
  • 调用dataGridView1.CancelEdit(),确保验证不通过时单元格回到修改前的状态
  • 替换自定义提示为标准MessageBox.Show(如果你的ms.error是自定义组件,可替换回原调用)
  • 补充空输入处理逻辑(可根据实际需求调整或删除)

额外注意事项:

  • 确保emp_number列的ReadOnly属性设为false,允许用户编辑
  • 若DataGridView绑定了数据源,验证通过后修改才会提交到数据源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:04:58