Combox如何实现二级联动

       最近在做机房的时候,需求是这样的,在选择一个用户名后,会显示出该用户的真实名字!这个功能在web 上用dropDownList 控件,很容易的就可以完成了,但是在winform上,好像就没那么简单了。

       我一开始做的时候,也是想像web 上那样, 请看博客web上如何实现两级联动!但是在winform上的时候,就会出现错误!请看下边的代码:

 private void cbxUserName_SelectedIndexChanged(object sender, EventArgs e)
        {
            //绑定用户真实姓名
            string userID = cbxUserName.Text.Trim();
            //string userID = cbxUserName.SelectedItem.ToString();
            txtTrueName.Text= fsa.LkUserTrueName(userID);


            //购卡
            dgvBuycard.DataSource = fsa.LkUserSellCardList(userID);
            //充值
            dgvRecharge.DataSource = fsa.LkUserChargeList(userID);
            //退卡
            dgvBackcard.DataSource = fsa.LkUserBackCardList(userID);
        }

        private void frmSettleAccount_Load(object sender, EventArgs e)
        {
            //显示用户名 
            DataTable dt = fsa.LkUserID();
            cbxUserName.DataSource = dt;
            this.cbxUserName.DisplayMember = "userID";
            this.cbxUserName.ValueMember = "userID";
            this.cbxUserName.SelectedIndex = -1;    
        }
    在cbxUserName控件绑定到表上的时候,他就会触发该控件的SelectIndexChange事件,但是此时该控件却不能获取值,所以传过去的空值。所以就会出错了!于是就想啊想,终于想出了一个办法。 就是先把该控件的SelectIndexChange事件取消,在绑定完了之后,在给该控件加上该事件! 看一下代码:

       private void cbxUserName_SelectedIndexChanged(object sender, EventArgs e)
        {
            //绑定用户真实姓名
            string userID = cbxUserName.Text.Trim();
            txtTrueName.Text= fsa.LkUserTrueName(userID);

            //购卡
            dgvBuycard.DataSource = fsa.LkUserSellCardList(userID);
            //充值
            dgvRecharge.DataSource = fsa.LkUserChargeList(userID);
            //退卡
            dgvBackcard.DataSource = fsa.LkUserBackCardList(userID);
        }

        private void frmSettleAccount_Load(object sender, EventArgs e)
        {
            
            
            //绑定用户名
            DataTable dt = fsa.LkUserID();
            this.cbxUserName.SelectedIndexChanged -= new System.EventHandler(this.cbxUserName_SelectedIndexChanged);
            cbxUserName.DataSource = dt;
            this.cbxUserName.DisplayMember = "userID";
            this.cbxUserName.ValueMember = "userID";
            this.cbxUserName.SelectedIndex = -1;
            this.cbxUserName.SelectedIndexChanged += new System.EventHandler(this.cbxUserName_SelectedIndexChanged);

        }
        这样一来,就很好的解决了这个问题。  希望能对你有所帮助!



你可能感兴趣的:(WinForm,dropdownlist)