0

我对 C# 中的 datagridview 有疑问。我通过 mysql 数据库的查询获取数据。但是由于某种原因,gridview 中只显示了结果的第一行。我使用以下代码来执行此操作:

MySqlCommand command = new MySqlCommand(query, Globals.Connection);
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            object[] dataset = new object[7];
            dataset[0] = reader["sto_name"];
            dataset[1] = reader["esss"];
            dataset[2] = reader["onl_name"];
            dataset[3] = reader["rpc_id"];
            if (reader["datum_aufstellung"].ToString() != "0")
            {
                dataset[4] = getDate(reader["datum_aufstellung"]);
            }
            else
            { 
                dataset[4] = "Kein Datum gesetzt";
            }
            if (reader["datum_abbau"].ToString() != "0")
            {
                dataset[5] = getDate(reader["datum_abbau"]);
            }
            else
            {
                dataset[5] = "Kein Datum gesetzt";
            }
            dataset[6] = reader["id"];
            dataGridView1.Rows.Add(dataset);
        }

它起作用了,之前的几行代码。^^ 你有什么想法,问题是什么?

更新: while 循环的内容只执行一次。在我在这里问我的问题之前,我也想知道这个事实。但是,如果我在 MySQL 客户端中执行查询,它会返回多于一个的行。

更新2: 我注意到,虽然注释了while循环的全部内容,但循环的执行时间与查询结果中的行完全相同。有任何想法吗?

更新3: 似乎之后的一切

dataGridView1.Rows.Add(dataset);

不执行。不仅在循环中,而且在整个函数中。但为什么?

问题已解决: 此处发布的代码没有任何问题。当输入 dgv 中的一行时,我在其余代码中有一个事件,它执行了一些操作。我想当这种情况发生时,循环中断了。删除该事件后,dgv 已正确填充。

4

3 回答 3

1

您应该使用 aDataAdapter并使用它来填充 DataTable。创建一个获取数据的方法,如下所示:-

public DataTable GetDataTable()
        {
            DataTable dt = new DataTable();

            using (SqlConnection con = new SqlConnection (@"YourCOnnectionString"))
            {
                using (SqlCommand cmd = new SqlCommand (query, con))
                {
                    var adaptor = new SqlDataAdapter ();
                    adaptor.SelectCommand = cmd;

                    con.Open();
                    adaptor.Fill(dt);

                    return dt;

                }
            }
        }

然后你可以用你的 DataGrid 引用它:-

DataTable Result = GetDataTable();

DatagridView1.DataSource = Result;
于 2013-01-15T16:10:12.987 回答
1

检查 Grid 上的 RowCount 属性。如果将其增加到所需的行数,它可能会设置为 1。

于 2013-01-15T15:46:38.267 回答
0

还有另一种简单的方法。您可以使用 DataTable 而不是 dataset 并将 dataGridView 的 DataSource 设置为该 DataTable。它将解决您的问题,并且使用它您可以轻松设置列标题。

于 2013-01-15T15:10:43.817 回答