ComboBox控件“设置 DataSource 属性后无法修改项集合”的解决

最近自己在编写一个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";
}

你可能感兴趣的:(combobox)