首页 > 解决方案 > DataTable 返回空 WPF

问题描述

我想根据在 ComboBox 中选择的值在数据网格中显示数据,但我的数据表函数返回 null 并且数据网格中不显示任何内容。

 public DataTable ReadData(User user)
    {
        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))
                {
                    if (db.State == ConnectionState.Closed)
                    {
                        db.Open();
                        command.Parameters.AddWithValue("@userName", user.UserName);

                        SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                        table = new DataTable();
                        dataAdapter.Fill(table);


                    }
                }
                db.Close();
            }
            catch (Exception e)
            {

                Console.WriteLine(e.Message);
            }
            return table;
        }
    }

此函数位于类库中。该函数在 WPF 项目中被调用,代码如下:

  private void BtnDisplay_Click(object sender, RoutedEventArgs e)
    {
        string userName = CmboxUserN.SelectedItem.ToString();
       
        User user1 = new User
        {
            UserName = userName
        };

        DataTable table = data.ReadData(user1);
        gridModules.DataContext= table;

    }

标签: c#wpf

解决方案


试试这些改变。似乎这条线table = new DataTable();永远不会被击中。您无需检查以确保连接处于关闭状态,因为您正在使用using语句。

    public DataTable ReadData(User user)
    {
        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))
                {
                    db.Open();
                    command.Parameters.AddWithValue("@userName", user.UserName);

                    SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                    table = new DataTable();
                    dataAdapter.Fill(table);
                }
            }
            catch (Exception e)
            {

                Console.WriteLine(e.Message);
            }
            return table;
        }
    }

此外,您不需要.Close()连接,因为SqlConnection它在 using 语句中,这意味着当退出 using 语句的范围时,对象将被释放。

另一个提示:您应该更改代码以让 try catch 围绕着每个问题,如果有任何错误,请将错误记录到控制台并返回一个new DataTable().


推荐阅读