一般我们在使用ComboBox时,会先给其添加items,其中的items通常又会是一个枚举。
此处举例用:
public enum Criterion
{
Pass,
Fail,
UpLimit,
DownLimit
}
再生成一个枚举型的变量 private Criterion m_eCriterion
然后再根据其下拉的选项来使用,单独的ComboBox有SelectedIndex属性,获取所选的枚举值用  m_eCriterion = (Criterion)combox1.SelectedIndex;即可实现。但是当这个ComboBox在Datagridview控件中,情况就不一样了。可以通过datagridview1.Rows[i].cell[0].Value.ToString()来得到这个所选的字符串,却得不到其SelectedIndex值,最初我想用(ComboBox)datagridview1.Rows[i].cell[0]来进行强制转换,但没有成功,没办法只好把上面得到的字符串再进行Switch,在每个case中进行枚举型的赋值,我想这肯定不是一个好的方案,请各位大虾出出主意。

解决方案 »

  1.   

    补充一下,用Enum.Parse(type,value)不行的,因为这种方式只能针对下拉列表中的items和枚举中的各个枚举值字符串完全相同的情况,此处用这种方式不得,因为在下拉列表中的item项可以为Down of 10 。而这个项是不能用来放在枚举项中的。 
      

  2.   

    combox cb = (ComboBox)datagridview1.Rows[i].cell[0].findControl("combox控件明")
    int index=cb.selectIndex;好像是这样的吧,你试试
      

  3.   

    设置DataGridViewComboBoxColumn的DisplayMember和ValueMember分别为显示的字符串和对应的枚举值。
      

  4.   

    To:xin_shui,你的这种方式,我试过,但没有找到可行的。我是直接用combox cb = (ComboBox)datagridview1.Rows[i].cell[0]。结果报错,我又试了一下combox cb = (ComboBox)datagridview1.Rows[i].cell[0].Value。仍然报错。或许是我没有找到相应的属性和方法,我试过FindControl不对的。麻烦你再想想看!谢谢!To:warrior,我去设置时,显示的是无:,下拉后显示的还是无,没法设置,我用这个表格是非绑定的表格。请再帮忙想想,谢谢!
      

  5.   

    为什么不用DataGridViewComboBoxColumn
      

  6.   

    TO:A1027,这里就是用的DataGridViewComboBoxColumn啊,大哥!
      

  7.   

    combox不是有SelectedText和SelectedItem这个属性吗,既然在datagrid里面你试试看。
      

  8.   

    To:rollng,Combox是有那两个属性,但是放到datagridView中,对datagridview来说,其中的Combox只能是dgv对象的Rows[i].Cell[x],而不是一个Combox,如果进行强制转换,反正我没有弄成功,请各位大虾再帮忙想想
      

  9.   

    this.column1.Items.IndexOf(this.dataGridView1.Rows[i].Cells[0].Value)
    其中column1为DataGridViewComboBoxColumnName,这样子就ok了
      

  10.   

    To:magic_hanfei,牛人一个,佩服佩服!
    揭帖。
      

  11.   

    TO:magic_hanfei,再问个问题,通过你说的这种方式,可以从datagridview的下拉项中取得这个indexof,然后再转换成了enum类型,即得到所要的value.
    如果现在得到的是value值,即上面所说的Criterion m_etest = Criterion.Fail;
    如果现在在表格中的DataGridViewComboBoxColumn列的(Collection)中分别为:Good(对应Pass),Sorry(对应Fail)。那么要通过m_etest来使DataGridViewComboBoxColumn的列显示为Sorry,如何实现啊。这个问题相当于所提问题的逆问题,恳请解答!
      

  12.   

    我不知道你想实现什么效果:你看看这样是不是你要的效果?
    //刚才得到的index
    int index=this.column1.Items.IndexOf(this.dataGridView1.Rows[i].Cells[0].Value) ;this.column1.Items[index] = m_etest[index];
    this.dataGridView1.Rows[0].Cells[0].Value = m_etest[index];
      

  13.   

    楼上正解,可行的。
    dgv.Rows["你的行数"].Cells[”你的列数“].Value = 列名.Items[(int)m_etest]; 感谢回帖