1、我有一个DataGridView,双击单元格时,从配置库读取配置信息,判断双击单元格后是弹子窗口,还是变文本框,或者变成下拉框,现在请问如何动态给某一个Cell添加combox,而不是给整列添加
2、假如某个单元格的配置信息是弹子窗口,子窗口是个listView,我在子窗口返回选择的值后,应该选择一个什么事件来判断这个单元格的值已经改变了?ValueChanged事件不行,初始化的时候有问题,cellParsing也不可以,cellEndEdit也无法判断。。

解决方案 »

  1.   

    我自己写过两篇文章,对应给你的答案。
    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();}
    不懂了再问吧!
      

  2.   

    第2是在datagridview所在窗体定义一个方法。写错了。
      

  3.   

    你好,请问dataGridView1_EditingControlShowing这个事件是如何触发的?
      

  4.   

    datagridview默认事件里面是包含EditingControlShowing事件的。你那里没有吗?
      

  5.   

    这个事件是在datagridview进入编辑状态时触发的。
      

  6.   

    删除原列,添加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)
    {
    }  
     
     
      

  7.   

    这个EditingControlShowing时间是有的,但是我怎么样也无法触发他,我想先双击单元格,触发CellDoubleClick事件,然后再触发EditingControlShowing事件,但是触发不了,我用isBeginEdit判断是否开启编辑返回false,用了datagridview.beginEdit()方法后还是返回false
      

  8.   

    你仔细查看一下你程序中是否有其他事件造成了无法触发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("控件显示完成");
            }
      

  9.   

    DataGridView常见用法和FAQ汇总
    DataGridView的一些技巧
    DataGridView使用技巧大全
    DataGridView 经典用法总结(上)--附有可下载的Demo
    DatagridView 经典用法总结(中)--附有可下载Demo
      

  10.   

    谢谢你啊,那么热心,我知道什么原因了,我把要编辑的那列的readonly设成true了,所以触发不了editcontrolshowing事件