2016-04-15 90 views
1

我有一個綁定到DataTable'ExcludedMachines'的DataGridView'DGV_MachinesExclusion'。在DataGridView中手動添加新行時,我使用DataGridView的CellValueChanged事件觸發下面的代碼。向數據表動態添加行添加兩行

 private void DGV_MachinesExclusion_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     DataRow dr = ExcludedMachines.NewRow(); 
     dr = ((DataRowView)DGV_MachinesExclusion.Rows[0].DataBoundItem).Row; 
     ExcludedMachines.Rows.Add(); 
     UpdateExlusionList(); 
    } 

結果是它增加了兩行。一個空白行和一個手動添加數據的行。 方法'UpdateExclusionList()'只是將DataTable寫入XML文件。 我曾經用這種方式在過去成功地動態添加行。任何人都可以解釋爲什麼此代碼添加兩行?

THX,托馬斯

回答

0

ExcludedMachines.Rows.Add(); 

將添加一個空白行,因爲你沒有在「添加」功能如何添加到行規定 - 你應該把

ExcludedMachines.Rows.Add(dr); 

改爲填充該行。

當你觸發事件時,它是否改變觸發它的單元格值(即,當你期望它只運行一次時,它不止一次地觸發事件)?你是否仔細檢查了'UpdateExclusionList()'方法,它肯定沒有包含任何額外的行創建代碼(從測試中可能留下?)?

希望這會有所幫助。

+1

你是正確的,它添加一個白色的行,因爲該行沒有填充。我已經改變了這一點,但它只是增加了兩個有填充的行。 'UpdateExclusionList()'方法肯定不會添加行,因爲我測試了沒有此方法之上的代碼的事件。 DataTable沒有任何事情發生。 –

+0

另外,當我在事件中休息時,它只會停止一次。所以我不認爲這個事件會被觸發兩次。當我離開這行:'ExcludedMachines.Rows.Add()'沒有被添加到DataTable中時... –

+0

這意味着問題在於DataRow行。你有沒有嘗試: 'DataRow dr =((DataRowView) –