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;
}
}
}
}
}
相关文章推荐
- Move Zeroes ——LeenCode
- 数据库表分割技术浅析(水平分割/垂直分割/库表散列)
- js中apply方法的使用
- Android ndk下载和环境配置
- UI控件笔记(八):UI之UISlider\UIStepper\ UIProgressView\ UITextView\UISwitch\ UIActivityIndicatorView\ UISeg
- FragmentTransaction add 和 replace 区别
- PR/FR/RR/CR各是什么
- [疯狂Java]JDK:CLASSPATH、java、javac、jar
- 十二、jdk命令之Java内存之本地内存分析神器:NMT 和 pmap
- 牛顿法求平方根
- android 中webview自适应屏幕
- 从android aidl理解Proxy/stub模式
- 基于GIS变电站综自系统的可视化远程智能巡检系统的实现
- 画圆
- 【bzoj4563】【HAOI2016】【放棋子】【高精度】
- Linux下设置帧和socket缓冲区的大小
- 各种开源UI
- linux网络编程之socket(五):tcp流协议产生的粘包问题和解决方案
- 系统之间通讯方式—SOAP(web service)
- Vim编辑快捷键