我winform开发经验不多,现在遇到了一个让我很不能理解的东西
现有FORM1
当FORM1_load中绑定了几个COMBOX,而DISPLAYMEMEBER 和MEMBERVALUE这2个字段只是用一个类封装进去了,仅此而已,绑定完COMBOX之后FORM1_LOAD事件便结束了,可是,这时候我又进入我封装的类去重新取值去了
这是为什么,FORM1_LOAD事件结束后不是应该页面打开了么?LOAD事件后边紧接着是什么事件?例如:
FORM1_LOAD(object sender,EventArgs e)
{
           IList < W_M_REPFREQ_VO > freqList =(List < W_M_REPFREQ_VO >) ComFormFunc.GetCopyList<W_M_REPFREQ_VO>(FormAccess.ReportFreqList); //就是个链表,别在意            W_M_REPFREQ_VO newFreq = new W_M_REPFREQ_VO();
            newFreq.setRepfreqid("");
            newFreq.setRepfreqnm("");
            freqList.Insert(0, newFreq);
//开始绑定数据
            this.cbx_Frequency.DataSource = freqList;
            this.cbx_Frequency.ValueMember = "Repfreqid";
            this.cbx_Frequency.DisplayMember = "Repfreqnm";}//运行到这个地方之后按理说应该窗口打开了吧?可是,又去W_M_REPFREQ_VO中取数据去了//封装的对象
public class W_M_REPFREQ_VO
    {
        private String repfreqid;        public String Repfreqid
        {
            get { return repfreqid; }            /////又回到这里取数据了
            set { repfreqid = value; }
        }
        private String repfreqnm;        public String Repfreqnm
        {
            get { return repfreqnm; }            /////又回到这里取数据了
            set { repfreqnm = value; }
        }
}我问问大家这到底是什么原因,有什么原因可以引起的,当然绑定没那么简单,会绑定很多,也会有IndexChanged事件,可是我都是在this.cbx_Frequency.DataSource = freqList;绑定数据源之后才注册的事件,所以formLoad之后不会触发某个comboxIndexChanged事件

解决方案 »

  1.   

    为 DataSource / DisplayMember /ValueMember 赋值, 并没有将数据取出放入 控件的绑定属性上,你试试用个 TextBox 绑定一个字段, 之后将 TextBox 设为不可见, 这时, 根本就不去取数据.数据绑定有一套很复杂的机制.
      

  2.   

    form load 完
    COMBOX 要显示的时候会根据Repfreqid去取Repfreqnm来显示
    既然Repfreqid是属性,取值自然会触发get么
      

  3.   

    数据绑定中, 
    一次绑定,  
    Property 是会被读取多次,
    这个原因没有详细深入考察, Property 是函数,get {
      if (无)
        创建;
      return 值;
    }这样避免一些带外负载吧.
      

  4.   


    先设置ValueMember 和DisplayMember
    再绑定不就Ok啦
    像你那样写,会先用datasource绑定一次,你设置ValueMember 和DisplayMember
    的时候又会重新再绑一次  当然就是两次了
      

  5.   

    你说的绑定2次你确定第2次绑定是在FORM_LOAD事件之后?