您的位置:首页 > 其它

datagridview中DataGridViewComboBoxColumn值的比较与选择触发的事件

2016-05-17 10:15 417 查看


//全局变量:星期 

        private DataGridViewComboBoxEditingControl weekComboBox = null;

        //全局变量:出诊时间

        private DataGridViewComboBoxEditingControl timeComboBox = null;
        

 //CurrentCellDirtyStateChanged事件

        private void dgv_Schedule_CurrentCellDirtyStateChanged(object sender, EventArgs e)

        {

            if (dgv_Schedule.IsCurrentCellDirty)  //当前单位格是否有未提交的改变

            {

//将当前单元格中的更改提交到数据缓存,但不结束编辑模式

                dgv_Schedule.CommitEdit(DataGridViewDataErrorContexts.Commit);

            }

        }

        //CellValueChanged事件

        private void dgv_Schedule_CellValueChanged(object sender, DataGridViewCellEventArgs e)

        {

//先-= 后+= 是为了出现死循环

            this.dgv_Schedule.EditingControlShowing -= new
System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.dgv_Schedule_EditingControlShowing);

            this.dgv_Schedule.EditingControlShowing += new
System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.dgv_Schedule_EditingControlShowing);

        } 

        //EditingControlShowing触发事件

        private void dgv_Schedule_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

        {

            //当前控件为DataGridViewComboBoxEditingControl

            if (e.Control is DataGridViewComboBoxEditingControl)

            {

                DataGridView dgv = (DataGridView)sender;

                //当前列的名称

                if (dgv.CurrentCell.OwningColumn.Name == "dTIME_DESC")

                {

                    this.timeComboBox = (DataGridViewComboBoxEditingControl)e.Control;

                    //SelectedIndexChanged事件的去除

                    this.timeComboBox.SelectedIndexChanged -= new EventHandler(timeComboBox_SelectedIndexChanged);

                    //SelectedIndexChanged事件的追加

                    this.timeComboBox.SelectedIndexChanged += new EventHandler(timeComboBox_SelectedIndexChanged);

                }

                //当前列的名称

                if (dgv.CurrentCell.OwningColumn.Name == "dDAY_OF_WEEK")

                {

                    this.weekComboBox = (DataGridViewComboBoxEditingControl)e.Control;

                    //SelectedIndexChanged事件的去除

                    this.weekComboBox.SelectedIndexChanged -= new EventHandler(weekComboBox_SelectedIndexChanged);

                    //SelectedIndexChanged事件的追加

                    this.weekComboBox.SelectedIndexChanged += new EventHandler(weekComboBox_SelectedIndexChanged);

                }

            }

        }

//星期下标改变事件

        private void weekComboBox_SelectedIndexChanged(object sender, EventArgs e)

        {

            ComboBox comboBox = (ComboBox)sender;

            if (!string.IsNullOrWhiteSpace(comboBox.Text))

            {

                //当前行的出诊时间

                string time = ((DataGridViewComboBoxCell)dgv_Schedule.Rows[dgvRowIndex].Cells["dTIME_DESC"]).Value.ToString();

                //当前行的星期数

                string week = comboBox.SelectedValue.ToString();

                //查找所有行看是否存在跟当前行星期和出诊时间一样的行

                for (int i = 0; i < dgv_Schedule.Rows.Count; i++)

                {

                    if (i != dgvRowIndex)

                    {

                        if (time == dgv_Schedule.Rows[i].Cells["dTIME_DESC"].Value.ToString()

                            && week == dgv_Schedule.Rows[i].Cells["dDAY_OF_WEEK"].Value.ToString())

                        {

                            MessageBox.Show("不能设定同一时间段的安排!");

                            dgv_Schedule.CancelEdit();

                            return;

                        }

                    }

                }

            }

        }

        

        //出诊时间下标改变事件

        private void timeComboBox_SelectedIndexChanged(object sender, EventArgs e)

        {

            ComboBox comboBox = (ComboBox)sender;

            if (!string.IsNullOrWhiteSpace(comboBox.Text))

            {

                //当前行的星期数

                string week = ((DataGridViewComboBoxCell)dgv_Schedule.Rows[dgvRowIndex].Cells["dDAY_OF_WEEK"]).Value.ToString();

                //当前行的出诊时间

                string time = comboBox.SelectedValue.ToString();

                //查找所有行看是否存在跟当前行星期和出诊时间一样的行

                for (int i = 0; i < dgv_Schedule.Rows.Count; i++)

                {

                    if (i != dgvRowIndex)

                    {

                        if (week == dgv_Schedule.Rows[i].Cells["dDAY_OF_WEEK"].Value.ToString()

                            && time == dgv_Schedule.Rows[i].Cells["dTIME_DESC"].Value.ToString())

                        {

                            MessageBox.Show("不能设定同一时间段的安排!");

                            dgv_Schedule.CancelEdit();

                            return;

                        }

                    }

                }

            }

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: