2013-05-21 22 views
0

有五列作爲DataGridViw組合框列事件在臨的datagridview的SelectedIndexChanged

1 - 產品ID 2-產品名稱3-描述4-Price和第五個是
選擇國其comboboxcolumn

DataGridView1.Columns.Add("ID", "Product ID") 
    DataGridView1.Columns.Add("Name", "Product Name") 
    DataGridView1.Columns.Add("Description", "Description") 
    DataGridView1.Columns.Add("Price", "Price") 


Dim datagridviewcol As New DataGridViewComboBoxColumn 
    datagridviewcol.Items.Add("Pak") 
    datagridviewcol.Items.Add("KUI") 
    datagridviewcol.Name = "Select" 
    DataGridView1.Columns.Add(datagridviewcol) 

我加入的datagridview的SelectedIndexChanged處理editingcontrolshowing像

Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e   As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing 
    If Me.DataGridView1.CurrentCell.ColumnIndex = 4 Then 
     Dim cb As ComboBox = CType(e.Control, ComboBox) 
     AddHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged 

    End If 

End Sub 

Private Sub ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    If CType(sender, ComboBox).SelectedIndex = 0 Then 
     MessageBox.Show("PAK") 
    Else 
     MessageBox.Show("KUI") 
    End If 

End Sub 

SelectedIndexChanged事件效果很好,但如果你是在datagridview的列#4,然後在MessageBox 4次提示,如果你從第15行中選擇「PAK」則消息框會提示15次,你 讓我只需要一次提示。

幫助我。這樣獨立行的messagebox顯示1次的次數並不比行號次數多。

+0

我猜處理器已多次添加,所以你應該在編輯控件中刪除的處理程序,然後添加它 – V4Vendetta

回答

1

發生這種情況的原因是,每次組合框顯示您正在向其中添加事件時,它都會觸發x次。

If Me.DataGridView1.CurrentCell.ColumnIndex = 4 Then 
    Dim cb As ComboBox = CType(e.Control, ComboBox) 
    RemoveHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged //remove handler if it was added before 
    AddHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged 

End If 

通過這種方式,您可以刪除任何附加到ComboBox.SelectedIndexChanged的處理程序。

MSDN

在時刻DataGridView控件主機一個編輯控制,和 重用編輯控制每當細胞類型不編輯之間改變 。當將事件處理程序附加到編輯控件 時,您必須採取預防措施以避免多次附加相同的處理程序。爲避免此問題,請在將事件處理程序附加到事件之前,從事件中刪除處理程序 。如果處理程序已附加到事件 ,這將使 防止重複,否則將不起作用。有關更多信息,請參閱DataGridViewComboBoxEditingControl類概述中的 示例代碼。

+0

+1,我已經加入了相關的部分從MSDN到你的答案是否,請隨時你想刪除信息 – V4Vendetta

+0

@ V4Vendetta感謝msdn鏈接:) – gzaxx

相關問題