[WinForm]DataGridview 和 ComboBox 有关

higoodstudydaydayup 2008-05-20 02:29:48
ID Name 。。。。。

第一列是DataGridViewComboBoxColumn

能否根据第一列下拉选项变化时 触发事件,
让第二列textbox内容和只读属性跟着变化

不知道我表达明白没,谢谢
...全文
526 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tll_W 2008-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 higoodstudydaydayup 的回复:]
谢谢楼上朋友,还想请问一下
如二楼朋友所说:
这样有一个问题就是第一列下拉选项变化时,第二列的内容和属性不立刻变化,而是等第一列失去焦点的时候才变化
这个bug能否修正啊?
[/Quote]

在第一列的下拉事件中加一句代码,让第一列失去焦点是否可行呢?
  • 打赏
  • 举报
回复
谢谢楼上朋友,还想请问一下
如二楼朋友所说:
这样有一个问题就是第一列下拉选项变化时,第二列的内容和属性不立刻变化,而是等第一列失去焦点的时候才变化
这个bug能否修正啊?
九章落地 2008-05-21
  • 打赏
  • 举报
回复
你用二楼的方法即可.
两个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
{
//
}
}
}
  • 打赏
  • 举报
回复
另四楼朋友的方法中,
得到焦点后,以后改变下拉列表中的东西,不再会触发事件了?
  • 打赏
  • 举报
回复
谢谢楼上的各位朋友,

二楼的问题我也遇到了:)

四楼的朋友方法不错
但如果有两个Combobox列,
比如一个是 ID
别一个是 ToolID
那我怎么区分这两个?
两个引发不同事件?

另五楼的朋友 什么情况下会发生异常,能否举个例子?


谢谢
lussnailatnet 2008-05-20
  • 打赏
  • 举报
回复
认为楼上的方法可以,只是当选择Textbox编辑框时
ComboBox cb = e.Control as ComboBox这里可能会有问题
最好加上一些判断控制语句
peterb 2008-05-20
  • 打赏
  • 举报
回复
可以在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");
}



goldxinx 2008-05-20
  • 打赏
  • 举报
回复
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 = "女的";
}
}
lsj_zrp 2008-05-20
  • 打赏
  • 举报
回复
这样有一个问题就是第一列下拉选项变化时,第二列的内容和属性不立刻变化,而是等第一列失去焦点的时候才变化
lsj_zrp 2008-05-20
  • 打赏
  • 举报
回复
绑定数据源
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 = "女的";
}
}

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧