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

WPF点击登录按钮抛System.FormatException,点确定后窗口正常打开如何解决

System.FormatException异常修复方案

根因说明

你遇到的Input string was not in a correct format异常并非数据查询阶段抛出,而是employeeRank1List控件绑定DefaultView的UI渲染阶段抛出的:控件渲染每行数据时,尝试转换Id或Name字段的格式与绑定目标属性不匹配,或者存在脏数据不符合类型要求。异常被方法内的try-catch捕获后弹出提示,但UI渲染的容错机制会跳过错误项继续加载,因此关闭弹窗后窗口仍能正常显示。

修复步骤

  • 第一步:优化查询语句,过滤/转换脏数据
    不要使用select *全量查询,明确指定需要的字段并做格式兼容处理,避免NULL或非法格式数据进入绑定逻辑:

    // 示例:Id为空时默认填0,Name为空时默认填空字符串
    string query = "SELECT ISNULL(Id, 0) AS Id, ISNULL(Name, '') AS Name FROM EmployeeRank1";
    

    如果Id字段存在非数字的脏数据,可以在SQL层直接过滤:

    string query = "SELECT Id, Name FROM EmployeeRank1 WHERE ISNUMERIC(Id) = 1";
    
  • 第二步:调整属性赋值顺序
    先给控件绑定数据源,再指定显示和值的绑定路径,避免控件未完全初始化时的绑定异常:

    // 调整后的顺序
    employeeRank1List.ItemsSource = employeeRank1Table.DefaultView;
    employeeRank1List.DisplayMemberPath = "Name";
    employeeRank1List.SelectedValuePath = "Id";
    
  • 第三步:调整方法触发时机
    确认ShowEmployeeRank1方法的调用位置,必须放在窗口的InitializeComponent()执行完成之后,或者放在窗口的Loaded事件中触发,避免控件未初始化完成时调用导致异常。

  • 兜底排查方案
    如果以上方法无效,可以在赋值数据源前遍历数据行,定位异常数据:

    foreach (DataRow row in employeeRank1Table.Rows)
    {
        Console.WriteLine($"Id值:{row["Id"]},类型:{row["Id"].GetType().Name}");
    }
    

    找到格式非法的行后清理对应数据库数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 17:06:05