C#:DataGridView只显示一行

时间:2013-01-15 15:05:12

标签: c# mysql visual-studio datagridview

我在C#中遇到数据网格视图问题。我通过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-Client中执行查询,它会返回多于一行的行。

更新2: 我注意到,虽然while循环的整个内容都被注释,但循环的执行次数与查询结果中的行完全相同。有什么想法吗?

更新3:

之后似乎就是一切
dataGridView1.Rows.Add(dataset);

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

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

3 个答案:

答案 0 :(得分:1)

检查网格上的RowCount属性。如果是这样,它可以设置为1,将其增加到所需的行数。

答案 1 :(得分:1)

您应该使用DataAdapter并使用它来填充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;

答案 2 :(得分:0)

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