首页 > 代码库 > 2014-07-30 DataGridView单元格ComboBox控件Index
2014-07-30 DataGridView单元格ComboBox控件Index
项目是在DataGridView单元格中搞得ComboBox控件。
而且要根据ComboBox对应的不同选项,来确定界面上的另一个ComboBox控件是否可用。
这样问题就出来了:
DataGridView中的ComboBox是没有事件的!
当更改了Combox中的值以后,必须用鼠标点一下别的地方(鼠标离开此单元格),才会走CellValueChanged事件......
研究+百度了好久,都不行,终于在中午灵光一闪,搞定了!
思路就是把这个没有事件的单元格,变成有事件的控件:
1 //定义全局变量。 2 int i_Enable; 3 int i_Index; 4 5 //给界面上的ComboBox控件注册Leave事件。 6 private void cbo_Test_Leave(~~~) 7 { 8 i_Index=cbo_Test.SelectedIndex; 9 }10 11 //给DataGridView注册CellClick事件。12 private void dgv_Test_CellClick(~~~)13 {14 i_Index=cbo_Test.SelectedIndex;15 }16 17 //给DataGridView注册EditingControlShowing事件。18 private void dgv_Test_EditingControlShowing(~~~)19 {20 if(this.dgv_Test.CurrentCell.OwningColumn.Name="col_Test")21 {22 ((ComboBox)e.Control).SelectedIndexChanged+=new EventHandler(ComboBox_SelectedIndexChanged);23 }24 } 25 26 //定义ComboBox_SelectedIndexChanged事件。27 private void ComboBox_SelectedIndexChanged(~~~)28 {29 string str=((ComboBox)sender).Text.Trim();30 DataGridViewColumn tmpCol=dgv_Test.CurrentCell.OwningColumn;31 if(tmpCol.Name="col_Test":)32 {33 if(x=="v_Enable")34 {35 i_Enable=1;36 }37 else38 {39 DataGridViewRow tmpRow=dgv_Test.CurrentCell.OwningRow;40 for(int i=0;i<dgv_Test.Rows.Count-1;i++)41 {42 if(dgv_Test.Rows[i].Cells["col_Test"].Value!=null&&43 dgv_Test.Rows[i].Cells["col_Test"].Value.ToString().Trim()=="3")44 {45 if(i=tmpRow.Index)46 {47 i_Enable=2;48 }49 else50 {51 i_Enable=1;52 break;53 }54 }55 else56 {57 i_Enable=2;58 }59 }60 }61 if(i_Enable==1)62 {63 cbo_Test.Enable=true;64 cbo_Test.SelectedIndex=i_Index;65 }66 else67 {68 cbo_Test.Enable=false;69 cbo_Test.SelectedIndex=0;70 }71 }72 }
由于使用的是EditingControlShowing事件,所以第一次点击会传一个空值,导致cbo_Test的值被清空。
为了解决这个问题,采用了一个全局变量来记录这个值,也就是相当于重新赋了一遍值,会闪一下。
有点遗憾......
不过,毕竟算是解决了问题,而且DataGridView中的二级联动也可以根据这个来实现。
所以,这个方法虽然不够完美,但应该还是有点儿参考价值的#^_^#~~~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。