首页 > 解决方案 > 组合框自动完成 SelectedValue 返回 NullReferenceException

问题描述

我在系统中有组合框,它的下拉样式设置简单,也可以自动完成。当我在输入记录的前几个字母后选择值时,系统会抛出 NullReferenceException。

我已将组合框与数据库绑定,并将 DisplayMember 设置为 Name 并将 Value Member 设置为 ID。当我在组合框 keydown 事件上按回车键时,我想选择产品并在消息中显示它的 ID,但它不起作用

private void FillCombobox()
{
        DataTable dt = new DataTable();

        try
        {
            // Set the connection string in the Solutions Explorer/Properties/Settings object (double-click)
            using (EmpireDbContext dbcontext = new EmpireDbContext())
            {
                var query = from c in dbcontext.Inventory
                            orderby c.ProductName
                            select new
                            {
                                c.ProductCode,
                                c.ProductName
                            };

                if (query == null)
                {
                    throw new ArgumentNullException();
                }

                dt.Columns.Add(
                    new DataColumn()
                    {
                        DataType = System.Type.GetType("System.String"),//or other type
                        ColumnName = "Name",
                    }
                );
                dt.Columns.Add(
                    new DataColumn()
                    {
                        DataType = System.Type.GetType("System.Int32"),
                        ColumnName = "ID",
                    }
                );

                foreach (var element in query)
                {
                    var row = dt.NewRow();
                    row["Name"] = element.ProductName;
                    row["ID"] = element.ProductCode;
                    dt.Rows.Add(row);
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }

        combo_searchName.DataSource = dt;
        combo_searchName.ValueMember = "ID";
        combo_searchName.DisplayMember = "Name";
    }

组合框 Keydown 事件

if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) 
{
   MessageBox.Show(combo_searchName.SelectedValue.ToString());
}

标签: c#winforms

解决方案


首先检查数据表的数据。如果数据表中没有可用数据。然后它会抛出异常。


推荐阅读