请教有三个ComboBox a ,b,c 都是动态数据绑定(从数据库读入)要实现的效果是a 的某个选项触发SelectedIndexChanged事件 根据所选从数据库读入数据绑定到b, b根据所绑定的数据触发 SelectedIndexChanged事件 进而从数据库读入数据绑定C 具体效果已经实现 但是发现当 a 有选项 但b 没有与a  匹配的数据时就有问题了,提示
“设置了dataSource 属性后无法修改项集合” ,同样b 有匹配数据而c无 也会有相同提示。我的问题是 能不能做到 在a 选择后触发SelectedIndexChanged事件 进行数据搜索绑定到b时如果没有匹配数据则将b 的内容清空 只保留一条项目"没有配备项目" ?同理 c也一样。
或者是有无禁止 SelectedIndexChanged事件 发生的办法?我是 C#新手,请赐教 谢谢!

解决方案 »

  1.   


    http://singlepine.cnblogs.com/category/42511.html
      

  2.   


    http://singlepine.cnblogs.com/articles/265678.html
      

  3.   

    Sorry忘记说了 我的是winform 应用程序====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2
      

  4.   

    参考这个:(两个的,第三个自己加吧)
    private void Form1_Load(object sender, System.EventArgs e)
    {
    SqlDataAdapter sda1 = new SqlDataAdapter("SELECT * FROM Customers",
    this.sqlConnection1);
    SqlDataAdapter sda2 = new SqlDataAdapter("SELECT * FROM Orders",
    this.sqlConnection1);
    sda1.Fill(dataset11.Customers);
    sda2.Fill(dataset11.Orders);this.comboBox1.DisplayMember = "CompanyName";
    this.comboBox1.ValueMember = "CustomerID";
    this.comboBox1.DataSource = dataset11.Customers;this.comboBox2.DisplayMember = "OrderDate";
    this.comboBox2.ValueMember = "OrderID";
    }private void comboBox1_SelectedValueChanged(object sender,
    System.EventArgs e)
    {
    if(this.comboBox1.SelectedValue != null)
    {
    this.comboBox2.DataSource =
    dataset11.Customers.FindByCustomerID(this.comboBox1.SelectedValue.ToString()
    ).GetChildRows(dataset11.Relations["CustomersOrders"]);
    }
    }
      

  5.   

    你如何做的,应该在selectedindexchanged事件中去做
      

  6.   

    楼上的代码我测试了 
    有很多语法错误
    无法调试通过提示没有 dataset11 findbyCustomerid 的方法  另外也没有对comboBox2绑定dataset数据源的语句我用的vs2003和VS2005都测试过了,都不能通过运行 不过谢谢你!
      

  7.   

    在a和b的SeletedIndexChanged事件中直接将对象填加到ComboBox的Items集合中,其显示值为对象的ToString()方法返回的字符串.
      

  8.   

    判断,如果找不到匹配的数据,数据库返回的DataTable肯定为空,所以在查询后判断返回是否有数据即可!另外,在绑定时,先要清空控件的值。
      

  9.   

    问题是 如果发现返回的记录集为空 那如何对combobox绑定? 一使用清空的设置 
    就会提示“设置了dataSource 属性后无法修改项集合” 那么这个时候就不用数据源绑定了,只有直接向 combobox里写入一条信息 提示没有匹配记录
    那么如何写入?
    直接写会提示就会提示“设置了dataSource 属性后无法修改项集合” 有没有办法解决
      

  10.   

    给ComboBox都加入DefaultValue,当返回的结果集为空时,只显示DefaultValue.
      

  11.   

    既然你的ComboBox是帮定数据源的(应该是DataTable吧?)。那你在a的SeletedIndexChanged事件中判断根据a选择的数据源(DataTable)是否为空不就行了么?
      

  12.   

    可以根据a的selectIndexChanged 判断b的是否为空,问题是 如何让b 显示我想要的内容呢?
    因为b没有匹配a的数据,如何让b显示提示信息?提示无记录匹配?c也一样
      

  13.   

    没人知道么 ?要结帖了====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2
      

  14.   

    to 可以根据a的selectIndexChanged 判断b的是否为空,问题是 如何让b 显示我想要的内容呢?
    因为b没有匹配a的数据,如何让b显示提示信息?提示无记录匹配?c也一样你可以先通过DataTable绑定a,然后在其的SelectedIndexChanged事件中,判断当前行信息,然后根据某种关联关系,用DataTable进行select语句,看是否有数据,如果有的话,用同样的filter产生dataview,绑定b;否则向b插入提示信息。在b的SelectedIndexChanged事件中,判断b的值,用同样的方法去填充c。
      

  15.   

    Re:可以根据a的selectIndexChanged 判断b的是否为空,问题是 如何让b 显示我想要的内容呢?
    因为b没有匹配a的数据,如何让b显示提示信息?提示无记录匹配?c也一样根据a中选中的信息在绑定b的DataTable中Select,如果没有匹配记录的话,则提示“无满足条件的记录”,那么c同时也显示“无满足条件的记录”。
    若b中有符合a的纪录那么就显示符合的纪录,而c中没有符合b选中项的纪录,那么只在c中提示“无记录”不就结了么。
      

  16.   

    //绑定罐组
    private void BindGroupCom(string lCode)
    {
    CanGroup g = new CanGroup(connStr);
    DataTable dt = g.GetDataFromLibrary(lCode);
    this.GroupCom.DataSource = dt;
    this.GroupCom.DisplayMember = "CCanGroupName";
    this.GroupCom.ValueMember = "CCanGroupCode";
    } //联动绑定罐组
    private void libCom_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    BindGroupCom(this.libCom.SelectedValue.ToString());
    }你把我得到DATATABLE的方法换成你的方法就可以了
      

  17.   

    问题是 如果发现返回的记录集为空 那如何对combobox绑定? 一使用清空的设置 
    就会提示“设置了dataSource 属性后无法修改项集合” 那么这个时候就不用数据源绑定了,只有直接向 combobox里写入一条信息 提示没有匹配记录
    那么如何写入?
    直接写会提示就会提示“设置了dataSource 属性后无法修改项集合” 有没有办法解决

    ---------------------------------
    可以在绑定后insert一条记录进去,WEB中对DROPDOWNLIST用过,combobox没经过测试
      

  18.   

    你可以在一开始先将b,c设为不可用,
    然后在a的SelectedIndexChanged事件中   根据a选项查询数据库可以得到一个影响行数 i ;
       if (i>0)
       {
          b就可以执行绑定数据的操作;
          并设为可用
       }
       else
       {
           Return;(什么都不用做,b保持不可用)
       }
      

  19.   

    其实else 不用写因该业可以得。
      

  20.   

    将combox 的datasource设置为一个datatable,通过改变datatable里面的数据后,在运行一下
    combox.datasource=dt;即可