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

WPF中DataTable返回null导致DataGrid无法展示ComboBox选中项对应数据

问题修复方案

问题1:ReadData方法逻辑缺陷导致返回null

你当前代码的核心问题是将参数赋值、DataTable初始化、数据填充的逻辑全部写在了if (db.State == ConnectionState.Closed)判断块内,只要连接初始状态不是关闭,这块代码完全不会执行,table未初始化就会返回null。同时你吞了所有异常,数据库连接错误、SQL语法错误、参数错误你完全感知不到,只会静默返回null。

修正后的ReadData代码:

public DataTable ReadData(User user)
{
    // 方法内声明局部变量,避免全局变量的残留问题
    DataTable table = new DataTable();
    using (SqlConnection db = new SqlConnection(AppConnect.Connection))
    {
        string query = "SELECT moduleCode,moduleName,modCredits,modHrsLeft FROM [Module] WHERE userName=@userName";
        try
        {
            using (SqlCommand command = new SqlCommand(query, db))
            {
                // SqlDataAdapter的Fill方法会自动开闭连接,不需要手动判断连接状态
                command.Parameters.AddWithValue("@userName", user.UserName);
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(table);
            }
        }
        catch (Exception e)
        {
            // 调试阶段可以在这里加断点看异常信息,不要只输出到控制台
            Console.WriteLine(e.Message);
            // 可选:抛出异常方便上层感知错误
            // throw;
        }
        // 不需要手动Close,using会自动释放连接
        return table;
    }
}

问题2:WPF DataGrid绑定错误

你给DataGrid.DataContext赋值DataTable是无效的,DataGrid需要绑定的是DataTable的默认视图。

修正后的调用代码:

private void BtnDisplay_Click(object sender, RoutedEventArgs e)
{
    // 先判断选中项不为空,避免空引用异常
    if (CmboxUserN.SelectedItem == null) return;
    // 如果你ComboBox绑定的是自定义对象,不要直接ToString,要取对应的属性值,比如((User)CmboxUserN.SelectedItem).UserName
    string userName = CmboxUserN.SelectedItem.ToString();
   
    User user1 = new User
    {
        UserName = userName
    };

    DataTable table = data.ReadData(user1);
    // 绑定到DefaultView,不要赋值给DataContext
    gridModules.ItemsSource = table.DefaultView;
}

额外排查点

  • 确认AppConnect.Connection连接字符串配置正确,有权限访问目标数据库
  • 确认[Module]表中存在对应userName的测试数据
  • 调试时查看传入的user.UserName是否是你期望的用户名,避免ComboBox的SelectedItem.ToString()返回的是类名而非实际用户名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:02