我正在尝试将Win32_SystemDriver中的值添加到DataGridView
中,我将加载它直到完成。当它最终加载所有数据时,它将更改查询中最后一个值的所有行。这是代码:
ObjectQuery query8 = new ObjectQuery("SELECT * FROM Win32_SystemDriver");
ManagementObjectSearcher searcher8 =
new ManagementObjectSearcher(scope, query8);
foreach (ManagementObject queryObj in searcher8.Get())
{
DataTable dt = new DataTable();
dt.Columns.Add("Descrição");
foreach (DataGridViewRow oItem in dataGridView1.Rows)
{
dt.Rows.Add(new object[] { queryObj["Description"] });
}
dataGridView1.DataSource = dt;
}
这段代码有什么问题?为什么在加载每个数据后它会将每一行更改为查询中的最后一个值?
这就是我自己解决的问题:
ObjectQuery query8 = new ObjectQuery("SELECT * FROM Win32_SystemDriver");
ManagementObjectSearcher searcher8 =
new ManagementObjectSearcher(scope, query8);
DataTable dt = new DataTable();
dt.Columns.Add("Descrição");
foreach (ManagementObject queryObj in searcher8.Get())
{
dt.Rows.Add(new object[] { queryObj["Description"] });
}
dataGridView1.DataSource = dt;
答案 0 :(得分:1)
问题是,在每次迭代时,您都会创建一个新的DataTable
,您将其填充并指定为DataSource
。在下一次迭代中,您将重复此过程并删除之前的信息。因此,您最后一次只有最后一个条目结束。
另一个问题是你的内循环。在第一次分配dataGridView1.DataSource = dt;
后,它将有1行,因此您可以在下一次迭代时向DataTable
添加1个元素,它将为2,依此类推。
你需要移动DataTable
的声明和外部循环之外的DataSource
的设置并删除内部循环
DataTable dt = new DataTable();
dt.Columns.Add("Descrição");
foreach (ManagementObject queryObj in searcher8.Get())
{
dt.Rows.Add(new object[] { queryObj["Description"] });
}
dataGridView1.DataSource = dt;