2012-03-02 38 views
1

我正在Winform上使用Datagridview控件,並使用數據的綁定源。數據填充在綁定源中,並相應填充datagridview。我正在尋找一個事件或類似的東西,這會在來自bindingsource的行被添加到datagridview時觸發。如何檢查是否有任何行添加到Datagridview

我想對添加的行執行一些操作。我嘗試了RowsAdded事件,但e.RowIndex沒有正確檢索。

編輯1:假設我在數據庫表中有10條記錄。我將這些數據提取到bindingsource中,並使用bindingsource作爲Datagridview的數據源。在向Datagridview添加行時,我想對Datagridview執行一些UI操作。我使用了RowsAdded事件,但它始終將RowIndex指定爲0或1。我也嘗試了一個遍歷RowsCount的foreach循環,如果我調試代碼,執行流程符合預期,但在UI上卻沒有得到體現。在完成所有事情之後,我已經調用了Datagridview1.refresh()。

你能幫我解決這個問題嗎?

+1

還有一個'RowCount'屬性可能有助於解決索引問題(只是一個猜測,因爲你沒有解釋什麼是問題)*沒有被正確檢索*沒有說太多! – V4Vendetta 2012-03-02 05:52:17

+0

真的很抱歉的簡短描述。其實我也沒有得到如何解釋這種情況。請找到Edit1。 – 2012-03-02 06:12:50

回答

2

當用戶使用新記錄的行添加新行時,此事件的處理程序中的DataGridViewRowsAddedEventArgs.RowIndex值等於新記錄的行的新位置的索引,該值大於該行剛添加。

但是,如果以編程方式添加行,則RowIndex值是所添加第一行的 索引。

private void dataGridView1_NewRowNeeded(object sender, 
    DataGridViewRowEventArgs e) 
{ 
    newRowNeeded = true; 
} 

private void dataGridView1_RowsAdded(object sender, 
    DataGridViewRowsAddedEventArgs e) 
{ 
    if (newRowNeeded) 
    { 
     newRowNeeded = false; 
     numberOfRows = numberOfRows + 1; 
    } 
} 

去給你確切的行指msdn rowadded link

0

取決於你希望綁定,您可以使用Control.BindingContextChanged事件迭代網格上的行後進行操作:

private void dataGridView1_BindingContextChanged(object sender, EventArgs e) 
{ 
    foreach (var row in dataGridView1.Rows) { 

    } 
} 

如果它不能正常工作,你能否說出你在綁定後究竟想要完成什麼?

+0

這是第一次迭代的工作。當我點擊一個菜單項來打開表單時,第一次UI變化被反映出來。但是,如果我從菜單項中打開相同的內容,而不關閉表單,則不會應用UI更改。 (我正在改變一些單元格的BackColor)。 – 2012-03-02 07:12:39

+0

我用一個按鈕創建了一個窗體,並在點擊具有該網格的另一個窗體的2個實例時打開。我在上面的方法中添加了代碼來更改某個單元格的bg顏色,並且這些更改都反映在兩個打開的實例中,因此無法重現 – ionden 2012-03-02 07:30:56

相關問題