簡體   English   中英

在C#中將數據加載到DataGridView中

[英]Loading data into DataGridView in C#

我正在嘗試將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;

問題在於,在每次迭代時,您都會創建一個新的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM