最近自己在编写一个Winform的测试管理工具,遇到两个问题:1、两个combox控件的联动;2、联动效果实现后,更换第一个combox控件的值时,系统提示“设置 DataSource 属性后无法修改项集合”的错误问题。自己在网上查了很多,最终还是解决了以上问题
需求描述:实现两个combox控件的联动功能,例如:combox1有“瀑布式”、“迭代式”两个选项,combox2根据combox1的数据在数据库中查询,然后绑定到combox2,第一次选择combox1的值时,combox2的值有正确绑定,但再次更改combox1的值时,系统就报“设置 DataSource 属性后无法修改项集合”的错误
解决方法:
问题一:通过combox控件的SelectedIndexChanged方法实现多个下拉控件的数据联动
问题二:由于DataSet 默认为空引用,因此在清除下拉列表项的时候首先需将ComboBox.DataSource付空值“null”。
代码如下:
/// <summary>
/// 项目类型选值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cbProType_SelectedIndexChanged(object sender, EventArgs e)
{
ProStageData(cbProStage, cbProType.Text);
}
/// <summary>
/// 获取项目阶段数据
/// </summary>
/// <param name="box">ComboBox类型控件名称</param>
/// <param name="ProType">项目类型</param>
private static void ProStageData(ComboBox box,string ProType)
{
CtbProStageBLL CproStage = new CtbProStageBLL();
List<CtbProStage> cProStageList = new List<CtbProStage>();
cProStageList = CproStage.GetModelList(" ProType='" + ProType + "'");
///清空节点
box.DataSource = null;
box.Items.Clear();
List<CtbProStage> clist = new List<CtbProStage>();
//使其Combox的第一项为空值
CtbProStage pf = new CtbProStage();
pf.ProStageName = "";
clist.Add(pf);
///添加一级节点
foreach (var prostage in cProStageList)
{ ///创建节点
CtbProStage pg = new CtbProStage();
pg.ProStageName = prostage.ProStageName;
clist.Add(pg);
}
box.DataSource = clist;
box.DisplayMember = "ProStageName";
}