想要达到的效果是:窗体加载的时候就在userIDcombobox里面添加从数据库中查出来的数据,窗体加载结束之后点userIDcombobox的时候username里面的数据随着userID的变化而变化。下面是我的代码:
private void fMCheck_Load(object sender, EventArgs e) { Facade.AdminFacade f = new Facade.AdminFacade(); DataTable dt = f.AllUsers(); cmbuserid.DataSource = dt; cmbuserid.DisplayMember = dt.Columns[0].ToString();//把数据表里的某一列显示在combobox里 string cardid = cmbuserid.Text.Trim(); cmbusername.Text = f.Selectusername(cardid); } private void cmbuserid_SelectedIndexChanged(object sender, EventArgs e) { Facade.AdminFacade f = new Facade.AdminFacade(); string cardid = cmbuserid.Text.Trim(); cmbusername.Text = f.Selectusername(cardid);//根据ID查询username }遇到的问题:
当注释掉cmbuserID_SelectedIndexChanged事件里面的代码时,加载没有任何问题,但是不能实现加载完成之后选择userID后面的username自己变换。直接运行会报类型转换的错误把加载事件的代码放到cmbuserID_SelectedIndexChanged事件里,并把加载事件的代码注释掉运行没有错误,但是加载完成之后没有userIDcombobox里没有任何东西。原因分析:
cmbuserid.DisplayMember = dt.Columns[0].ToString();这行代码在load的时候会触发cmbuserID_SelectedIndexChanged事件,这就导致下面查询的时候userID不对,转换不过来的bug。
解决方案: 在cmbuserID_SelectedIndexChanged事件里加一个if语句,判断userID是否格式正确,然后再进行查询就不会有问题了。