我在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将允许,但这样的项目不在列表中。换句话说,我想要组合框来防止用户输入不在代码列表中的代码。
感谢您的关注,我会再次审视这个问题。 – Wodzu 2010-07-21 13:41:50
你有权利。你让我再一次考虑这一点,并且我添加了一个bindingSource(显示CurrencyManager)事件。通过他们,我已经能够完成任务。 – Wodzu 2010-07-25 12:58:35