我在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已正确填充。
答案 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。 它将解决您的问题,并使用它可以轻松设置列标题。