当前位置:  开发笔记 > 编程语言 > 正文

将数据正确绑定到组合框并处理其事件

如何解决《将数据正确绑定到组合框并处理其事件》经验,为你挑选了0个好方法。

我在SQL Server中有一个表,如下所示:

ID Code Name     Surname
1   MS  Mike     Smith 
2   JD  John     Doe
3   UP  Unknown  Person

等等...

现在我想以这种方式将来自此表的数据绑定到ComboBox中,在ComboBox中我显示了Code列中的值.

我正在以这种方式进行绑定:

SqlDataAdapter sqlAdapter = new SqlDataAdapter("SELECT * FROM dbo.Users ORDER BY Code", MainConnection);
sqlAdapter.Fill(dsUsers, "Users");
cbxUsers.DataSource = dsUsers.Tables["Users"];
cmUsers = (CurrencyManager)cbxUsers.BindingContext[dsUsers.Tables["Users"]];
cbxUsers.DisplayMember = "Code";

这段代码似乎有效.我可以滚动浏览代码列表.此外,我可以手动编写代码,ComboBox将为我自动完成代码.

但是,我想在组合框的顶部放置一个标签,以显示当前所选用户代码的名称和姓氏.

我的观点是这样的:"所以,我需要找到一个事件,它将在组合框中更改代码后启动,在那种情况下,我将获得当前的DataRow ..."

我正在浏览组合框的事件,尝试了很多但没有成功.

例如:

private void cbxUsers_SelectionChangeCommitted(object sender, EventArgs e)
{
 if (cmUsers != null)
 {
  DataRowView drvCurrentRowView = (DataRowView)cmUsers.Current;
  DataRow drCurrentRow = drvCurrentRowView.Row;
  lblNameSurname.Text = Convert.ToString(drCurrentRow["Name"]) + " " + Convert.ToString(drCurrentRow["Surname"]);
 }
}

这给我一个奇怪的结果.首先,当我通过鼠标滚动滚动时,它不会返回我希望获得的行.例如在JD上,它向我显示"Mike Smith",在MS上它显示我"John Doe",在UP上它再次向我显示"Mike Smith"!另一个问题是,当我开始键入ComboBox并按Enter键时,它不会触发事件.

但是,当我以这种方式将数据绑定到lblNameSurname.Text时,一切都按预期工作:

lblNameSurname.DataBindings.Add("Text", dsusers.Tables["Users"], "Name");

这里的问题是我只能绑定一列,我想要两个.我不想为它使用两个标签(一个用于显示名称,另一个用于显示姓氏).

那么,我的问题的解决方案是什么?

另外,我有一个与ComboBox中的数据选择有关的问题.现在,当我在组合框中输入内容时,它允许我输入列表中不存在的字母.例如,我开始输入"J",而不是用"D"结束,所以我会有"JD",我输入"Jsomerandomtexthere".Combobox将允许,但列表中不存在此类项目.换句话说,我希望组合框防止用户输入代码列表中没有的代码.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有