【问题标题】:Bound ComboBox fill values from reference table来自参考表的绑定 ComboBox 填充值
【发布时间】:2018-09-24 21:58:59
【问题描述】:

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

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

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

【问题讨论】:

  • 这更多是对操作的描述。你有什么问题?
  • 对您的程序的解释非常好,但问题是什么?
  • 我需要操作员组合框来显示员工表中的员工姓名,但将员工 ID 存储在轮班日志中。现在它显示 Id 但下拉菜单显示名称。在这种情况下,NW 是 ID。
  • 贴出填写ComboBox.DataSource的代码,然后。有人会过来修理它。如果问题是可见的并且可以重现。

标签: c# winforms combobox


【解决方案1】:

我尝试了几种不同的方法来填充组合框。第一个是通过使用智能标签。选择员工表作为源,名称作为显示,首字母作为值。我想也许 Selected Value 将是字段 selectedvalue 也将被存储。其次,我尝试了代码。

        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

【讨论】:

  • 为带有点名称的字段创建别名。 Operators.Initials 应该是 InitialsOperators.Name 应该是 Name。这也是因为您不能拥有带有虚线字段名称的.DisplayMember = "Operators.Name";。它行不通。当然,同样的规则也适用于.ValueMember。要检索SelectedValue(和/或SelectedItem),请使用以下内容:ComboBox1.GetItemText(ComboBox1.SelectedValue);
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2015-03-04
    • 2016-04-21
    • 2016-01-20
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多