vs2005,combox 数据绑定和SelectedIndexChanged事件触发 引发的问题

昨天前天,都在折腾一个问题,vs2005里面自带的combox(winform)的问题.

这个问题是这样的,我从数据库中读取出表中的数据,每行填充到预设的类中,再把这些类数据,填充到这个类的集合中,然后combox的dataSouce指向这个类集合.然后设置这个combox的显示和值为其名称属性和编号属性.

这样没有问题.

但当我在combox的SelectedIndexChanged事件中写了获取当前combox的已选择的类的编号属性的时候,发现总在报错.

找了半天原因,才发现:

combox的SelectedIndexChanged事件,在datasouce指定的时候就被触发了,这时候数据还没有绑定好,自然会报错.

我认为这是不合理的.SelectedIndexChanged不应该在绑定数据的中间被触发.

我最后解决办法是设置了一个标志符isLoaded,bool类型,在填充方法完毕后,设为true.允许SelectedIndexChanged被触发.

代码如下:

///   <summary>
        
///  绑定cmbdoc数据的方法
        
///   </summary>
private   void  FillCmbDoc()
        {
            
// 新建文档类的集合
            Class.ClassDocCollection items1  =   new  DocAddin.Class.ClassDocCollection();
            
// 提取所有文档数据,填充到集合
            items1.FillInAllDoc();

            cmbDoc.DataSource 
=  items1;
            cmbDoc.DisplayMember 
=   " S名称 " ;
            cmbDoc.ValueMember 
=   " I编号 " ;
            
// 设置标志符,true说明该combox已经绑定好了,允许SelectedIndexChanged事件被触发了.
            isLoaded  =   true ;
           
        }

private   void  cmbDoc_SelectedIndexChanged( object  sender, EventArgs e)
        {
            
// 如果绑定完毕,并且选择的不为空
             if  (cmbDoc.SelectedItem != null   &&  isLoaded == true )
            {
                
// 获得文档类的编号
                 int  docid  =   int .Parse(cmbDoc.SelectedValue.ToString());
                
// 由编号从数据库中提取出该编号的文档类对象
                Class.ClassDoc cd  =   new  DocAddin.Class.ClassDoc(docid);

                tbPath.Text 
=  cd.S路径;

                
if  (tbName.Text.Trim() == "" )
                {
                    tbName.Text 
=  cd.S名称  +   " - " ;                    
                }
            }
        }

你可能感兴趣的:(Exchange)