首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[WinForm]DataGridview 和 ComboBox 有关,该怎么处理

2012-01-01 
[WinForm]DataGridview 和 ComboBox 有关ID Name 。。。。。第一列是DataGridViewComboBoxColumn能否根据第一列

[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);    }}void cb_SelectedIndexChanged(object sender, EventArgs e){    MessageBox.Show("Selected index changed");} 


[解决办法]
你用二楼的方法即可.
两个ComboBox列,只要做一下判断就行,如下面的代码,有两个comboBox列,分别在第1列和第2列:

C# code
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                {                    //                }            }        }
[解决办法]
探讨
谢谢楼上朋友,还想请问一下
如二楼朋友所说:
这样有一个问题就是第一列下拉选项变化时,第二列的内容和属性不立刻变化,而是等第一列失去焦点的时候才变化
这个bug能否修正啊?

热点排行