[英]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.