我用的vs2008开发winform
datagridview中的combobox没有触发事件。
用以下的方法出现我点击任一个combox时反复触发,请问有没有更好的办法?void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dataGridView = (DataGridView)sender;
            if (dataGridView.CurrentCell.GetType().Name == "DataGridViewComboBoxCell")
            {
                ComboBox comboBox = (ComboBox)e.Control;
                comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
            }
        }
        void comboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox comboBox = (ComboBox)sender;
            MessageBox.Show(string.Format("选中:{0}", comboBox.Text));
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridViewComboBoxColumn newColumn = new DataGridViewComboBoxColumn();
            newColumn.Items.Add("下拉项1");
            newColumn.Items.Add("下拉项2");
            newColumn.Items.Add("下拉项3");
            dataGridView1.Columns.Add(newColumn);
        //    dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
}

解决方案 »

  1.   

     private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (e.Control is DataGridViewComboBoxEditingControl)
                {
                    (e.Control as DataGridViewComboBoxEditingControl).SelectedIndexChanged += new EventHandler(DataGridViewComboBoxEditingControl_SelectedIndexChanged);
                }
            }
            private void DataGridViewComboBoxEditingControl_SelectedIndexChanged(object sender, EventArgs e)
            {
            }
      

  2.   

    除了EditingControlShowing事件
    也可在绑定行数据事件中添加相应代码
      

  3.   

    谢谢你,还是不行,
    我点其它行的comboBox时,还没有改变index,就会触发一个selectedindexchange事件,而且反复的
      

  4.   


    我想你应该在绑定事件处理程序时,要先删除这个事件处理程序它自己。否则这个事件会在整个委托链中被调用多次,所以应该是这样:
    comboBox.SelectedIndexChanged -= new EventHandler(comboBox_SelectedIndexChanged);
    comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);