[WinForm]DataGridview 和 ComboBox 有关
ID Name 。。。。。
第一列是DataGridViewComboBoxColumn
能否根据第一列下拉选项变化时 触发事件,
让第二列textbox内容和只读属性跟着变化
不知道我表达明白没,谢谢
[解决办法]
绑定数据源
DataTable dts = new DataTable();
dts.Columns.Add("sSex");
dts.Columns.Add("sName");
for (int i = 0; i < 10; i++)
{
DataRow dr2=dts.NewRow();
if (i < 5)
dr2[0] = "男";
else
dr2[0] = "女";
dr2[1] = i.ToString();
dts.Rows.Add(dr2);
}
this.dataGridView1.AutoGenerateColumns = false;
this.dataGridView1.DataSource = dts;
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataPropertyName = "sSex";
col.HeaderText = "性别";
DataTable dt = new DataTable();
dt.Columns.Add("sexname");
dt.Columns.Add("sexvalue");
DataRow dr = dt.NewRow();
dr[0] = "男";
dr[1] = "男";
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1[0] = "女";
dr1[1] = "女";
dt.Rows.Add(dr1);
col.DataSource = dt;
col.ValueMember = "sexvalue";
col.DisplayMember = "sexname";
this.dataGridView1.Columns.Add(col);
DataGridViewTextBoxColumn cols = new DataGridViewTextBoxColumn();
cols.DataPropertyName = "sName";
cols.HeaderText = "名称";
this.dataGridView1.Columns.Add(cols);
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow dgr = this.dataGridView1.Rows[e.RowIndex];
if (dgr.Cells[0].Value.ToString() == "男")
{
dgr.Cells[1].ReadOnly = true;
dgr.Cells[1].Value = "男的";
}
else
{
dgr.Cells[1].ReadOnly = false;
dgr.Cells[1].Value = "女的";
}
}
[解决办法]
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow dgr = this.dataGridView1.Rows[e.RowIndex];
if (dgr.Cells[0].Value.ToString() == "男")
{
dgr.Cells[1].ReadOnly = true;
dgr.Cells[1].Value = "男的";
}
else
{
dgr.Cells[1].ReadOnly = false;
dgr.Cells[1].Value = "女的";
}
}
[解决办法]
可以在DataGridView.EditingControlShowing 事件中处理
举例
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){ ComboBox cb = e.Control as ComboBox; if (cb != null) { // first remove event handler to keep from attaching multiple: cb.SelectedIndexChanged -= new EventHandler(cb_SelectedIndexChanged); // now attach the event handler cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged); }}void cb_SelectedIndexChanged(object sender, EventArgs e){ MessageBox.Show("Selected index changed");}
[解决办法]
你用二楼的方法即可.
两个ComboBox列,只要做一下判断就行,如下面的代码,有两个comboBox列,分别在第1列和第2列:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0)//如果是第1个ComboBoxColumn { //判断下拉框1的值,然后执行相应的操作 if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == "男") { // } else { // } } else if (e.ColumnIndex == 1)//如果是第2个ComboBoxColumn { //判断下拉框2的值,然后执行相应的操作 if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString() == "已婚") { // } else { // } } }
[解决办法]