如何给DataGridView特定的某个单元格动态添加combox

weskerjiang 2010-12-21 02:02:39
1、我有一个DataGridView,双击单元格时,从配置库读取配置信息,判断双击单元格后是弹子窗口,还是变文本框,或者变成下拉框,现在请问如何动态给某一个Cell添加combox,而不是给整列添加
2、假如某个单元格的配置信息是弹子窗口,子窗口是个listView,我在子窗口返回选择的值后,应该选择一个什么事件来判断这个单元格的值已经改变了?ValueChanged事件不行,初始化的时候有问题,cellParsing也不可以,cellEndEdit也无法判断。。。。。
...全文
1095 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weskerjiang 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangcaidpjxwq 的回复:]
先不要在你原有的项目上测试。你尝试新建一个小例子来测试一下。看看情况时怎么样的。
[/Quote]
谢谢你啊,那么热心,我知道什么原因了,我把要编辑的那列的readonly设成true了,所以触发不了editcontrolshowing事件
wangcaidpjxwq 2010-12-22
  • 打赏
  • 举报
回复
先不要在你原有的项目上测试。你尝试新建一个小例子来测试一下。看看情况时怎么样的。
wangcaidpjxwq 2010-12-22
  • 打赏
  • 举报
回复
你仔细查看一下你程序中是否有其他事件造成了无法触发beginedit事件。我这里只写双击事件和EditingControlShowing事件是可以两者都触发的。代码你看:
        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
MessageBox.Show("双击");
dataGridView1.BeginEdit(false);
}

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
MessageBox.Show("控件显示完成");
}
weskerjiang 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangcaidpjxwq 的回复:]
这个事件是在datagridview进入编辑状态时触发的。
[/Quote]
这个EditingControlShowing时间是有的,但是我怎么样也无法触发他,我想先双击单元格,触发CellDoubleClick事件,然后再触发EditingControlShowing事件,但是触发不了,我用isBeginEdit判断是否开启编辑返回false,用了datagridview.beginEdit()方法后还是返回false
wuyq11 2010-12-21
  • 打赏
  • 举报
回复
删除原列,添加combobox列
DatagridViewComboxColumn cmbox = Datagridview.Columns["COmbox控件的Name"] as DatagridViewComboxColumn ;

cmbox.DataSource = 下框的数据源;
cmbox.DataPropertyName= datagrid的数据源的要绑定的列;
cmbox.d...Member="下拉框显示的TEXT";
cmbox.ValueMember="隐藏的值";


private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewComboBoxEditingControl)
{
(e.Control as DataGridViewComboBoxEditingControl).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}
}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
}


wangcaidpjxwq 2010-12-21
  • 打赏
  • 举报
回复
这个事件是在datagridview进入编辑状态时触发的。
wangcaidpjxwq 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weskerjiang 的回复:]
引用 2 楼 wangcaidpjxwq 的回复:
引用 1 楼 wangcaidpjxwq 的回复:
我自己写过两篇文章,对应给你的答案。
1:http://hi.baidu.com/wangcaidpj219x/blog/item/44d6a730bf923514ebc4af89.html
这篇文章写的是给datagridview添加任何控件。和你的问题适应。
2:我的意思就是不要判……
[/Quote]
datagridview默认事件里面是包含EditingControlShowing事件的。你那里没有吗?
weskerjiang 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangcaidpjxwq 的回复:]
引用 1 楼 wangcaidpjxwq 的回复:
我自己写过两篇文章,对应给你的答案。
1:http://hi.baidu.com/wangcaidpj219x/blog/item/44d6a730bf923514ebc4af89.html
这篇文章写的是给datagridview添加任何控件。和你的问题适应。
2:我的意思就是不要判断是否变了。直接在datagridview中定义一个方……
[/Quote]
你好,请问dataGridView1_EditingControlShowing这个事件是如何触发的?
wangcaidpjxwq 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wangcaidpjxwq 的回复:]
我自己写过两篇文章,对应给你的答案。
1:http://hi.baidu.com/wangcaidpj219x/blog/item/44d6a730bf923514ebc4af89.html
这篇文章写的是给datagridview添加任何控件。和你的问题适应。
2:我的意思就是不要判断是否变了。直接在datagridview中定义一个方法,该方法用来得到子窗口信息并更新当前单元格的值。然后……
[/Quote]
第2是在datagridview所在窗体定义一个方法。写错了。
wangcaidpjxwq 2010-12-21
  • 打赏
  • 举报
回复
我自己写过两篇文章,对应给你的答案。
1:http://hi.baidu.com/wangcaidpj219x/blog/item/44d6a730bf923514ebc4af89.html
这篇文章写的是给datagridview添加任何控件。和你的问题适应。
2:我的意思就是不要判断是否变了。直接在datagridview中定义一个方法,该方法用来得到子窗口信息并更新当前单元格的值。然后将该方法委托给弹出的子窗口在关闭时执行。例子并不一定是和你的问题有关系。但是理解之后就能够解决你这个问题。下面是委托方法

首先在子窗体中定义一个委托,然后在父窗体初始化子窗体时将子窗体希望调用的父窗体方法绑定在子窗体上。就可以了。代码如下: //父窗体form1 子窗体form2

//父窗体方法 send();

//子窗体方法定义委托

public delegate void rshowgysmb();//定义委托

public rshowgysmb showgys;//定义委托实现类

//调用父窗体中的方法

private void useparent()

{

if(showgys!=null)

{

showgys();

}

}

//父窗体中的方法:显示子窗体

private void showchildform()

{

form2 f=new form2();

f.showgys+=new form2.rshowgysmb(send);

f.showdialog();

}
不懂了再问吧!

110,590

社区成员

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

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

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