none
在DataGridView控件中加入ComboBox下拉列表框,出现重复值的错误,如何解决? RRS feed

  • 问题

  •  Private Sub 施工合同信息表DataGridView_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles 施工合同信息表DataGridView.CellBeginEdit
            Using ConnForm As New OleDb.OleDbConnection(DatabasePath)
                ConnForm.Open()
                Dim command As New OleDb.OleDbCommand()
                command.CommandText = "SELECT 合作单位名称 FROM 施工合作单位信息表"
                command.Connection = ConnForm
                Dim AdapterFormComboBox As New OleDb.OleDbDataAdapter(command)
                AdapterFormComboBox.Fill(DataSetAdapterForm, "施工合作单位信息表")
                Dim ComboBoxCompanyName As New ComboBox()
                ComboBoxCompanyName.Name = "ComboBoxCompanyNameValue"
                AddHandler ComboBoxCompanyName.SelectedIndexChanged, AddressOf Me.ComboBoxCompanyName_SelectedIndexChanged
                ComboBoxCompanyName.DataSource = DataSetAdapterForm.Tables("施工合作单位信息表")
    
                ComboBoxCompanyName.DisplayMember = "合作单位名称"
                ComboBoxCompanyName.ValueMember = "合作单位名称"
                ComboBoxCompanyName.Visible = False
                ComboBoxCompanyName.Width = 0
                施工合同信息表DataGridView.Controls.Add(ComboBoxCompanyName)
                If Me.施工合同信息表DataGridView.CurrentCell.ColumnIndex = 0 Then
                    ComboBoxCompanyName.Visible = False
                    ComboBoxCompanyName.Width = 0
                    ComboBoxCompanyName.Left = Me.施工合同信息表DataGridView.GetCellDisplayRectangle(Me.施工合同信息表DataGridView.CurrentCell.ColumnIndex, Me.施工合同信息表DataGridView.CurrentCell.RowIndex, True).Left
                    ComboBoxCompanyName.Top = Me.施工合同信息表DataGridView.GetCellDisplayRectangle(Me.施工合同信息表DataGridView.CurrentCell.ColumnIndex, Me.施工合同信息表DataGridView.CurrentCell.RowIndex, True).Top
                    ComboBoxCompanyName.Width = Me.施工合同信息表DataGridView.GetCellDisplayRectangle(Me.施工合同信息表DataGridView.CurrentCell.ColumnIndex, Me.施工合同信息表DataGridView.CurrentCell.RowIndex, True).Width
    
                    ComboBoxCompanyName.Visible = True
                Else
                    ComboBoxCompanyName.Visible = False
                    ComboBoxCompanyName.Width = 0
                End If
            End Using
        End Sub
    
     Private Sub ComboBoxCompanyName_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    
            MsgBox(DirectCast(sender, ComboBox).Text)'?当这个事件发生时, MsgBox为什么会弹出很多次,本例是3次,我只需要弹出一次。
    施工合同信息表DataGridView.CurrentCell.Value = DirectCast(sender, ComboBox).Text End Sub
    
    
    1、施工合同信息表DataGridView在窗体加载时已经绑定到了一个dataset的“施工合作单位信息表”。
    
    2、施工合同信息表DataGridView_CellBeginEdit事件发生时,我"SELECT 合作单位名称 FROM 施工合作单位信息表",并将ComboBox
    
    加载进施工合同信息表DataGridView
    

    3、程序运行后,当我按施工合同信息表DataGridView的某一个Cell,施工合同信息表DataGridView_CellBeginEdit事件发生时,有一个奇怪的现象,如图所示:

    “合作单位名称”在某一个CELL双击以后,其他cell的值全部变成了"星驰电发v得到",这是为什么?

    4、我需要点击一个CELL时,仅更新这个CELL的值,其他的CELL不变,求教怎么做?

    我参考的文章:

    http://ljl-xyf.iteye.com/blog/756798

    5、我没有看懂的语句

    AddHandler ComboBoxCompanyName.SelectedIndexChanged, AddressOf Me.ComboBoxCompanyName_SelectedIndexChanged

    与其对应的函数,为什么不懂呢?因为我去掉这个语句运行的结果是一样的。

     

    http://hi.baidu.com/useek/blog

    • 已编辑 firedream 2012年2月3日 15:13 细化描叙
    2012年2月3日 11:32

答案

  • 错误在于,不应该在施工合同信息表DataGridView_CellBeginEdit事件是定义Dim ComboBoxCompanyName As New ComboBox()。

    应该将这句Dim ComboBoxCompanyName As New ComboBox()写在Public Class Form1中。


    http://hi.baidu.com/useek/blog
    2012年2月3日 16:16

全部回复

  • 错误在于,不应该在施工合同信息表DataGridView_CellBeginEdit事件是定义Dim ComboBoxCompanyName As New ComboBox()。

    应该将这句Dim ComboBoxCompanyName As New ComboBox()写在Public Class Form1中。


    http://hi.baidu.com/useek/blog
    2012年2月3日 16:16
  • Thank you.

    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年2月7日 5:31
    版主