【问题标题】:How to loop through database table to add data in datagrid?如何循环通过数据库表在datagrid中添加数据?
【发布时间】:2017-08-15 15:28:23
【问题描述】:

我有从数据库表读取到数据网格的代码,但它只运行一次并将第一行添加到数据库中的数据网格。有没有办法可以多次运行它来读取不同行的数据并将其添加到我的数据网格中。

 public static void AddData( DataGrid datagrid)
 {
        SqlConnection connect = GetConnection();
        SqlCommand command = new SqlCommand();
        command.Connection = connect;

        //connect to database
        connect.Open();
        command.CommandText = "Select req_status From TH_request where req_status = 'N'";
        command.ExecuteNonQuery();
        status = (String)command.ExecuteScalar();
        connect.Close();

        connect.Open();
        command.CommandText = "Select req_date_time From TH_request where req_status = 'N'";
        command.ExecuteNonQuery();
        time = (DateTime)command.ExecuteScalar();
        connect.Close();

        connect.Open();
        command.CommandText = "Select resp_user_name From TH_request where req_status = 'N'";
        command.ExecuteNonQuery();
        locationName = (String)command.ExecuteScalar();
        connect.Close();

        collection.Add(new DataObject()
        {
             A = time,
             B = locationName,
             C = status,
             D = respUserName
        });
        datagrid.ItemsSource = collection;

}

【问题讨论】:

  • Select 语句后面可以跟多个字段名。 Select req_status, req_date_time,resp_user_name from.... where .... 然后使用 SqlDataReader 从返回的结果集中获取字段。这是基本的 ADO.NET 编程。或许您应该停止编码工作并查看 ADO.NET 上的一些教程。
  • 你应该真的从这方面的一些教程开始。当您只需要 一次 时,您已经在查询数据库 3 次。将其包装在一个循环中只会查询它更多次。相反,查询数据库一次 以获取您需要的完整结果集,然后将 UI 控件绑定到该结果集。
  • 您的代码将起作用。 DGV 没有更新,所以你需要使用一个技巧。只需 datagrid.ItemsSource = null;然后 datagrid.ItemsSource = collection;

标签: c# mysql wpf datagrid logic


【解决方案1】:

您应该只需要执行一个命令一次。例如,您可以使用SqlDataReader 为查询返回的每一行创建一个DataObject

public static void AddData(DataGrid datagrid)
{
    collection.Clear();
    using (SqlConnection connection = GetConnection())
    {
        using (SqlCommand command = new SqlCommand("Select req_status, req_date_time, resp_user_name From TH_request where req_status = 'N'", connection))
        {
            connection.Open();
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    collection.Add(new DataObject()
                    {
                        A = Convert.ToDateTime(reader["req_date_time"]),
                        B = Convert.ToString(reader["resp_user_name"]),
                        C = Convert.ToString(reader["req_status"]),
                        D = respUserName
                    });
                }

            }
        }
    }
    datagrid.ItemsSource = collection;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2019-12-26
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多