C# 关于dgv中DataGridViewComboBoxCell触发事件

cell触发事件的先后顺序:

①不进行cell编辑情况时:

          CellEnter-->CellLeave-->CellValidating-->CellValidated

②对cell进行编辑后:

          CellEnter-->CellBeginEdit-->CellLeave-->CellValidating-->CellValueChanged-->CellValidated-->CellEndEdit

1.从数据库中读取下拉列表数据

/// <summary>
        /// 新添加行时显示下拉框
        /// </summary>
        private void dgvShowCombobox()
        {
            //传感器小类
            DataGridViewComboBoxCell dgvSnrStyleCombox = new DataGridViewComboBoxCell();
            string sqlSensorType = "SELECT sensorType,sensorStyle FROM sensorstyle";
            MySqlDataAdapter cbxAdapter = MySQLConnect.GetMySQLDB().getAdapter(sqlSensorType);
            DataSet dtSensorTypeCombox = new DataSet();
            cbxAdapter.Fill(dtSensorTypeCombox, "sensorstyle");
            dgvSnrStyleCombox.DataSource = dtSensorTypeCombox.Tables["sensorstyle"];
            dgvSnrStyleCombox.DisplayMember = "sensorStyle";
            dgvSenserManage.Rows[dgvSenserManage.Rows.Count - 1].Cells[2] = dgvSnrStyleCombox;
           
        }

 

2.下拉框改变时触发事件

 #region    对dgv中的下拉框操作
        /// <summary>
        /// dgv中DataGridViewComboBoxCell编辑事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvSenserManage_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dgv = sender as DataGridView;

            //判断相应的列
            if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1)
            {

                //给这个DataGridViewComboBoxCell加上下拉事件
                (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);

            }
        }
        /// <summary>
        /// 组合框事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {

            ComboBox combox = sender as ComboBox;
            combox.Leave += new EventHandler(combox_Leave);
            try
            {
                //在这里就可以做值是否改变判断
                if (combox.SelectedItem != null)
                {
                    //MessageBox.Show("在这里做获取选中值赋值到大类中的操作", "提示");
                    int currentColumn = (int)dgvSenserManage.CurrentCell.ColumnIndex;
                    if (currentColumn == 2)           //传感器小类
                    {
                       

String snrStyleCurrentValue = ((DataRowView)(combox.SelectedItem)).Row.ItemArray.GetValue(0).ToString();
                        string sql = string.Format("SELECT sensorType FROM sensorstyle WHERE sensorStyle='{0}'", snrStyleCurrentValue);
                        MySqlCommand command = MySQLConnect.GetMySQLDB().giveCommand(sql);

//StringmysqlStr="Database=GuGong;DataSource=127.0.0.1;UserId=root;Password=123456;pooling=false;CharSet=utf8;port=3306";//连接数据库是注意设置编码
                        //MySqlConnection mysql = new MySqlConnection(mysqlStr);
                        //MySqlCommand mysqlCommand = new MySqlCommand(sql, mysql);
                        //mysql.Open();
                        //MySqlDataReader reader = command.ExecuteReader(); 
                        //string snrType = "";
                        //while (reader.Read())
                        //{
                        //    if (reader.HasRows)//有一行读一行
                        //    {
                        //        snrType = (string)reader["sensorType"];

                        //    }
                        //}
                        //dgvSenserManage.CurrentRow.Cells["sensorType"].Value = snrType;
                        
                        object obj = command.ExecuteScalar();
                        if (obj != null)
                        {
                            String snrType = obj.ToString();
                            dgvSenserManage.CurrentRow.Cells["sensorType"].Value = snrType;
                        }


                    }
                    if(currentColumn == 3)             //厂家全称
                    {

                    }
                    

                }
                //Thread.Sleep(100);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 离开combox时,把事件删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void combox_Leave(object sender, EventArgs e)
        {
            ComboBox combox = sender as ComboBox;
            //做完处理,须撤销动态事件
            combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
        }

 #endregion

3.在此单元格失去焦点后单元格内值更改触发事件

 /// <summary>
        /// 单元格中的值改变时触发
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvSenserManage_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1) return;
            if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
            DataGridViewComboBoxCell cc;
            if (e.ColumnIndex == 2)                //ComboBoxCell列传感器小类
            {
                cc = (DataGridViewComboBoxCell)this.dgvSenserManage.CurrentCell;
                if (cc.Value != null)
                {
                    string dgvCell = Convert.ToString(dgvSenserManage.CurrentCell.Value);
                    MessageBox.Show(dgvCell);
                }
            }
        }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值