2017-05-30 14 views
0

Win32_SystemDriverの値をDataGridViewに追加しようとしていますが、終了するまで読み込みます。すべてのデータのロードが終了すると、クエリの最後の値のすべての行が変更されます。これはコードですDataGridViewにC#でデータをロードする

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

問題は各繰り返しで、あなたが移入新しい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; 
+0

を削除する必要が

Descrição 'は既にこのDataTableに属しています – Rekcs

+0

@Rekcsすべての 'ManagementObject'クエリに対して1つの列しか持ちませんか? –

+0

@Rekcsおそらくループ外でも移動するべきです。私は私の答えを編集しました –

関連する問題