C# DataTable中court_case字段格式校验及规范化格式化实现
解决方案
1. 改造校验+格式化方法
原来的Validar_Cc方法仅能校验数字合法性,我们新增一个格式化方法,直接输出符合XXXX/XX规范的结果,同时返回校验结果:
// 输入原始court_case字符串,返回(是否校验通过,格式化后的字符串) public static (bool IsValid, string FormattedCase) FormatCourtCase(string rawCourtCase) { // 空值直接返回不合法 if (string.IsNullOrWhiteSpace(rawCourtCase)) return (false, string.Empty); // 按斜杠分割 var parts = rawCourtCase.Split('/'); // 必须只有1个斜杠,分割为2段 if (parts.Length != 2) return (false, string.Empty); // 处理左侧部分,转不成整数默认是0 int leftNum = 0; bool leftValid = int.TryParse(parts[0].Trim(), out leftNum); // 处理右侧部分,转不成整数默认是0 int rightNum = 0; bool rightValid = int.TryParse(parts[1].Trim(), out rightNum); if (!leftValid || !rightValid) return (false, string.Empty); // 左侧补前导零到4位,右侧补前导零到2位 // 如果你示例中的2/1转0002/10是需要右侧补后导零,可把右侧代码替换为 rightNum.ToString().PadRight(2, '0') string formatted = $"{leftNum:D4}/{rightNum:D2}"; return (true, formatted); }
2. 批量遍历DataTable修正数据
你原来的遍历代码类型写错了,dataGridView2.Rows的元素是DataGridViewRow,我们直接取绑定的DataTable来操作效率更高:
private void btnCORRECT_ERROR_COURTCASE_Click(object sender, EventArgs e) { int successCount = 0; int failCount = 0; // 拿到dataGridView2绑定的DataTable DataTable dt = dataGridView2.DataSource as DataTable; if (dt == null || !dt.Columns.Contains("court_case")) { MessageBox.Show("未加载有效数据或缺少court_case字段"); return; } // 遍历每一行修正 foreach (DataRow row in dt.Rows) { // 跳过空值行 if (row["court_case"] == DBNull.Value) { failCount++; continue; } string rawValue = row["court_case"].ToString(); var formatResult = FormatCourtCase(rawValue); if (formatResult.IsValid) { // 赋值修正后的值 row["court_case"] = formatResult.FormattedCase; successCount++; } else { failCount++; } } // 刷新界面显示 dataGridView2.Refresh(); MessageBox.Show($"处理完成:成功修正{successCount}条,失败{failCount}条"); // 如果需要把修正后的数据回写到数据库,在这里加你的更新逻辑即可 }
可选优化
如果你不需要单独保留校验方法,原来的Validar_Cc也可以直接调用新的格式化方法实现:
public static bool Validar_Cc(string CourtCase) { return FormatCourtCase(CourtCase).IsValid; }
内容的提问来源于stack exchange,提问作者Fyah10
相关产品推荐
相关产品推荐

