You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

收银销售界面中如何在单元格点击时显示子DataGridView以选择商品?

Hey there! Let's tackle this requirement for your cashier interface—showing a child DataGridView when clicking a cell to select products. Here's a practical, step-by-step approach (I’ll focus on WinForms since it’s widely used for desktop cashier systems):

1. Set Up the Parent Cashier DataGridView

  • First, configure your main transaction grid (parent DataGridView) with columns like Product Name, Price, Quantity, etc. Identify the specific column (e.g., "Product Name") where clicking should trigger the product selection grid.
  • Attach the CellClick event to this parent grid—this is the trigger point for showing the child selection grid.

2. Build the Product Selection Child Grid

  • For reusability, create a dedicated UserControl or a borderless form that contains the child DataGridView. Populate it with your product catalog (bind to a DataTable, list of product objects, or your database data source).
  • Add essential product details: Product ID, Name, Unit Price, and maybe a category filter to narrow down options quickly.
  • Set up a selection mechanism—either handle the CellDoubleClick event (for quick selection) or add a "Select" button below the grid.

3. Position and Show the Child Grid Dynamically

  • When the parent cell is clicked, calculate the exact screen position of the cell to display the child grid right where the user clicked. Use GetCellDisplayRectangle() to get the cell's bounds, then convert it to screen coordinates.
  • Here’s a code snippet for the parent grid’s CellClick event:
    private void dgvCashier_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        // Only trigger if it's the product column and a valid row
        if (e.ColumnIndex == dgvCashier.Columns["colProduct"].Index && e.RowIndex >= 0)
        {
            var cellBounds = dgvCashier.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
            var screenPosition = dgvCashier.PointToScreen(cellBounds.Location);
    
            // Launch the product selection form
            using (var productSelector = new ProductSelectionForm())
            {
                // Position the form just below the clicked cell
                productSelector.Location = new Point(screenPosition.X, screenPosition.Y + cellBounds.Height);
                
                if (productSelector.ShowDialog() == DialogResult.OK)
                {
                    // Populate the parent grid with selected product data
                    dgvCashier.Rows[e.RowIndex].Cells["colProduct"].Value = productSelector.SelectedProduct.Name;
                    dgvCashier.Rows[e.RowIndex].Cells["colPrice"].Value = productSelector.SelectedProduct.UnitPrice;
                }
            }
        }
    }
    

4. Handle Product Selection and Data Passing

  • In the child selection form, store the selected product (e.g., a public property SelectedProduct). When the user selects an item, set DialogResult.OK and close the form.
  • If you’re using a UserControl instead of a form, you can hide it after selection and wire up an event to notify the parent grid of the selected product.

5. Polish for a Cashier-Friendly Experience

  • Add a search box to the child grid to let cashiers quickly find products by name or ID—this is a must for busy sales environments.
  • Include keyboard shortcuts: Enter to select a product, Esc to close the selection grid, so cashiers don’t have to switch between mouse and keyboard constantly.
  • Match the child grid’s styling (colors, font size, row height) to your main cashier interface for consistency.

内容的提问来源于stack exchange,提问作者Bashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:27:34