您的位置:首页 > 其它

DataGridView中comboBox(DataGridViewComboBoxColumn)的事件编写

2012-02-27 09:08 543 查看
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;

}

}

}

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