今天遇到一个不小问题,vs2005里面自带的combox(winform)的问题.
问题:我将webservice发布的方法返回的数据集绑定到combox的dataSouce.然后设置这个combox的displaymenber和valuemenber.
步骤是这样:
1datatable->datasource
2.set datatalbe.字段1->displaymenber
3set datatalbe.字段2->valuemenber
这样没有问题.
但当我在combox的SelectedIndexChanged事件中写了获取当前combox的已选择的类的编号属性的时候,发现总在报错.
数据项索引小于无穷大。
经调试发现:
程序执行到步骤1时没有继续执行步骤2,而是转向触发combox的SelectedIndexChanged事件。这时的combox没有绑定完数据,自然会报错了。
解决
设置一个bool类型,标志符IsBinded,在填充方法完毕后,设为true.允许SelectedIndexChanged被触发.
代码如下:

using
?System;

?System.Collections.Generic;

?System.ComponentModel;

?System.Data;

?System.Drawing;

?System.Text;

?System.Windows.Forms;

?SupplyProduct.WebReference;


namespace
?SupplyProduct


...
{

????public?partialclass?Form1?:?Form


????...{

????????privateint?_cityID=-1;

????????bool?_isBinded?=false?CityID


????????...{

????????????get


????????????...{

????????????????if?(_cityID?<0)

????????????????????return;

?????????????????_cityID;

????????????}

????????????set


????????????...{

????????????????_cityID??value;

????????????}

????????}

?????????IsBinded


????????...


????????????...?_isBinded;

????????????}


????????????...{

????????????????_isBinded??Form1()


????????...{

????????????InitializeComponent();

????????}


????????void?Form1_Load(object?sender,?EventArgs?e)


????????...{

????????????CityID?;

????????????BindCities(ref?cbProvince);

????????????CityID??()cbProvince.SelectedValue;

????????????BindCities(?cbCity);

????????}?BindCities(?ComboBox?combox)


????????...{

????????????WSCitiesBLL?cityAPI?new?WSCitiesBLL();

????????????chemchina.CitiesDataTable?cities??cityAPI.GetChildCties(CityID);

????????????combox.DataSource??cities;

????????????combox.DisplayMember?"cityName;

????????????combox.ValueMember?cityID;

????????????IsBinded?true;

????????}?cbProvince_SelectedIndexChanged(

????????...?(IsBinded&&cbProvince.SelectedValue!=null)


????????????...{

????????????????CityID?)cbProvince.SelectedValue;

????????????????BindCities(?cbCity);

????????????}

????}

}