参考表中的绑定组合框填充值

时间:2018-09-24 21:58:59

标签: c# winforms combobox

首先,这是一个员工轮班日志应用程序。

员工登录并选择他们将要操作的机器。通常这是两台机器,但是如果有人不露面,他们可能最多登录4台。
我有一个WinForm,它有一个ComboBox绑定到Shift_Log表中的一个字段。

我的问题是组合框绑定到Shiftlog_ID字段,并显示operator_id而不是运算符名称。下拉列表显示员工姓名,但是一旦选中,它就会显示ID。我需要它来始终显示员工的姓名。 我认为我期望很高。我是否需要取消组合并在cmbOperator_SelectedValueChange_Changed事件中编写代码以将ID存储到shiftlog字段。然后,我将不得不将代码放入表单加载中,以根据记录中存储的ID显示当前员工的姓名。 我在VB.Net中做了很多工作,这是我的第一个C#项目。没想到会那么难。绝对是学习曲线。如果有人能指出正确的方向,我将不胜感激。
谢谢。

Shift Log Form

2 个答案:

答案 0 :(得分:0)

我尝试了几种不同的方法来填充组合框。首先是通过使用智能标记。选择员工表作为源,选择“名称”作为显示,选择“姓名缩写”作为值。我认为也许“选定值”将是字段“选定值”也将被存储的原因。其次,我尝试了代码。

        private void fillcmbOperator()
    {
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.LazerMaintenance_Conn))
        {
            try
            {
                string query = "SELECT Operators.Initials, Operators.Name " +
                       "FROM Operators WHERE Operators.Active_Ind = 'True'";

                SqlDataAdapter da = new SqlDataAdapter(query, conn);
                conn.Open();

                DataSet ds = new DataSet();
                da.Fill(ds, "dsOperators");

                cmbOperator.ValueMember = "Initials";
                cmbOperator.DisplayMember = "Name";
                cmbOperator.DataSource = ds.Tables["dsOperators"];

                conn.Close();

            }
            catch (Exception ex)
            {
                // write exception info to log or anything else
                MessageBox.Show("Error occured! : " + ex);
            }
        }
    }

顺便说一句,DGV上的打印机选择效果很好。我通过“集合”“编辑列”弹出窗口完全设置了它。

Collections "Edit columns" pop-up

答案 1 :(得分:0)

似乎当我将字段从“数据源”选项卡拖放到屏幕上时,IDE向文本值添加了绑定。然后,当我通过控件智能标记更新组合框时,它添加了第二个绑定。一位同事注意到,删除与文本值的第一个绑定后,我便有了两个绑定。顺便说一句,为了使其能够在第一条记录上工作,我已将绑定移至FormLoad。现在,它显示操作员名称并保存ID,并且在记录之间导航时不会出现错误。感谢您的输入。

cmbOperator.DataBindings.Add(new Binding(“ SelectedValue”,this.shift_LogBindingSource,“ Operator”,true));