DataGridView中comboBox(DataGridViewComboBoxColumn)的事件编写

 

DataGridView中comboBox(DataGridViewComboBoxColumn)的事件编写 收藏
DataGridView中虽然绑定了一个comboBox,但是这个comboBox没有任何事件。

今天想加一个SelectedIndexChanged事件,遍寻网络后找到一可行方法,总结如下:

view plaincopy to clipboardprint?
DataGridViewComboBoxColumn Fparmrangedesc = new DataGridViewComboBoxColumn();   
 
dgView.Columns.Add(Fparmrangedesc);  
dgView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgView_EditingControlShowing); //主要是这句   
 
//写事件方法  
private void dgView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)  
  
    if (dgvReportParms.CurrentCell.GetType().Name == "DataGridViewComboBoxCell")   
           {   
               ((ComboBox)e.Control).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);   
                ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);   
         }  
 
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)  
 
//里面想写什么你说了算!  

DataGridViewComboBoxColumn Fparmrangedesc = new DataGridViewComboBoxColumn();
……
……
dgView.Columns.Add(Fparmrangedesc);
dgView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgView_EditingControlShowing); //主要是这句

写事件方法
private void dgView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (dgvReportParms.CurrentCell.GetType().Name == "DataGridViewComboBoxCell")
            {
                ((ComboBox)e.Control).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
                ((ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
            }
}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
//里面想写什么你说了算!
}
 

最后,最重要的一步:把DataGridView的CausesValidation属性一定要改为false.

原因是在选择下拉框时需要数据验证,可能报错

http://blog.sina.com.cn/s/blog_73fbac9a0100sjje.html

 

在实际使用中,我用cellvaluechanged 就实现了.

private void dataGridViewSN_CellValueChanged(object sender, DataGridViewCellEventArgs e)

{

if (e.RowIndex >= 0)

{

if (dataGridViewSN.Columns[e.ColumnIndex].Name == "Status")

{

if (dataGridViewSN["Status", e.RowIndex].Value.ToString() == "Fail")

{

DataTable dtResult = new DataTable();

string strSql;

strSql = string.Format(SqlHelper.Instance.GetSql("QueryErrorCode"), comboActivity.Text);

dtResult = SqlHelper.Instance.executeSql(strSql);

DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridViewSN.Rows[e.RowIndex].Cells["Error_Code"];

cb.DataSource = dtResult;

cb.ValueMember = "Code";

cb.DisplayMember = "drop_desc";

cb.ReadOnly = false;

//dataGridViewSN.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

 

}

else

 

{

DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridViewSN.Rows[e.RowIndex].Cells["Error_Code"];

cb.Value = null;

cb.DataSource = null;

cb.Items.Clear();

cb.ReadOnly = true;

}

}

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值