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);
- }
这样一来,就很好的解决了这个问题。 希望能对你有所帮助!