今天遇到一个不小问题,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);

}

}

}