WinForms Datagridview - Lookup" Form"

时间:2014-07-09 00:46:00

标签: c# winforms datagridview lookup

我正在开发发票应用。 Product表与InvoiceLineItems表链接,以便用户使用 可以从组合框的下拉列表中选择产品,其中列出了所有可用的产品。 我想要另一种选择产品的解决方案 现在我想从另一种形式中选择产品,当用户输入产品列时显示。 该表格具有搜索功能,可通过名称或产品代码快速查找产品。 选择产品后,datagridview中的查阅列应该在列表中选择该产品, 当然,为查阅列设置了DisplayMember-ValueMember。 这是可能的,怎么办? 代码:

_products = this._productService.GetAllProducts();//returns List<ProductModel>
...
DataGridViewComboBoxColumn products = new DataGridViewComboBoxColumn();
products.ValueMember = "ID";
products.DisplayMember = "Name";
dgvLineItems.Columns.Add(products);
products.DataSource = _products;

... 此代码允许我从datagridview中的combobox中选择产品,product_id保存在所选产品的数据库中,并且工作正常。但正如我之前所说,我想搜索 并选择单独形式的产品,并将此选择反映在组合框中。 原因是因为我在数据库中有3000个产品,其中很多都有相似的名称,有时需要时间才能在组合框中找到产品...... 也欢迎替代解决方案。

1 个答案:

答案 0 :(得分:0)

如果我对你说得不对,你可以尝试下一个解决方案:

在“查找”表单中,创建能够返回productId的公共方法。此方法将调用此表单的ShowDialog方法,最后将返回到您的主窗体选择项。最后,在组合框中设置选定的值:

搜索表单:

 int selectedProductId = -1;

    public int Display()
    {
        this.ShowDialog();

        return selectedProductId;
    }

主要表格:

 private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
    {
  int selectedProduct;
        if (e.ColumnIndex == productColumn)//Check that user entered relevant column
        {
            selectedProduct = searchForm.Display();
        }

//Set value
products.SelectedValue = selectedProduct;

    }