在C#中将数据加载到DataGridView中

时间:2017-05-30 15:18:01

标签: c# datagridview

我正在尝试将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;

1 个答案:

答案 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;