【问题标题】:DataGridViw ComboBox Column Event SelectedindexChangedDataGridView 组合框列事件 SelectedindexChanged
【发布时间】:2013-05-21 12:06:46
【问题描述】:

在 tha datagridview 中有五列

1 - 产品 ID 2- 产品名称 3- 描述 4- 价格,第五个是
选择国家是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 显示类似

 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

selectedindexchanged 之类的事件

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

它运作良好,但如果您在 datagridview 行 #4 上,那么消息框 4 次会提示您 如果您从第 15 行选择“PAK”,则消息框将提示 15 次,我只需要提示 1 次。

帮帮我。以便与行无关,消息框显示 1 次而不是行号的次数。

【问题讨论】:

  • 我猜handler已经被添加了多次,所以你应该在Editing控件中先删除handler再添加

标签: c# vb.net visual-studio-2010 events datagridview


【解决方案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 类概述中的示例代码。

【讨论】:

  • +1 ,我已将 MSDN 中的相关部分添加到您的答案中,如果您想删除信息,请随意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多