日期:2014-05-18  浏览次数:20835 次

[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 事件中处理 

举例 
C# code

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);
    }
}

v