如何将特定单元格从form2中的一个DataGridView添加到form1中的另一个DataGridView

问题描述 投票:0回答:1

我正在开发一个 .NET 8、C#、SQL Server 项目,这是一个库存管理系统。

我的问题是:我有一个表单中的 DataGridView,用于保存发票,如下屏幕截图所示:

在此输入图片描述

当我双击带有红色标记的单元格时,它会弹出另一个表单,其中包含另一个 DataGridView,其中包含我在数据库中拥有的所有产品,并用于添加到发票中。

当我双击第二个 DataGridView 中的行时,我希望将 DataGridView 中的前两列添加到第一个表单中的 DataGridView - 就像这个屏幕截图所示:

在此输入图片描述

这是我的代码 - 第一个主要表单:

using System.Windows.Forms;

public partial class NewPurchaseInvoiceView : Form
{
    public NewPurchaseInvoiceView()
    {
        InitializeComponent();
    }

    private void ItemsGridList_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == ItemsGridList.Columns["IDColumn"].Index && e.RowIndex >= 0)
        {
            ItemsSelectionModeView itemsSelectionModeView = new ItemsSelectionModeView();
            itemsSelectionModeView.ShowDialog();
        }
    }
}

对于第二种形式,我从以下位置选择产品:

using System.Windows.Forms;

namespace HMLalpha.Views
{
    public partial class ItemsSelectionModeView : Form
    {
        public ItemsSelectionModeView()
        {
            InitializeComponent();
        }

        private void ItemsSelectionModeView_Load(object sender, EventArgs e)
        {
            DataTable dataTable = ItemsController.PROCEDURE_DISPLAYALLITEMS();
            ItemsListGridView.Rows.Clear();

            foreach (DataRow dataRow in dataTable.Rows)
            {
                ItemsListGridView.Rows.Add(dataRow[0], dataRow[1], dataRow[2], dataRow[3], dataRow[7], dataRow[4], dataRow[5], dataRow[6]);
            }
        }

        private void ItemSearchTextBox_TextChanged(object sender, EventArgs e)
        {
            DataTable dataTable = ItemsController.PROCEDURE_SEARCHITEMS(ItemSearchTextBox.Text);
            ItemsListGridView.Rows.Clear();

            foreach (DataRow dataRow in dataTable.Rows)
            {
                ItemsListGridView.Rows.Add(dataRow[1], dataRow[2], dataRow[3], dataRow[7], dataRow[4], dataRow[5], dataRow[6]);
            }
        }

        public void ItemsListGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            NewPurchaseInvoiceView newPurchaseInvoiceView = new NewPurchaseInvoiceView();

            foreach (DataGridViewRow dataGridViewRow in ItemsListGridView.SelectedRows)
            {
                newPurchaseInvoiceView.ItemsGridList.Rows.Add(dataGridViewRow.Cells[1].Value.ToString(), 
                    dataGridViewRow.Cells[2].Value.ToString());
            }
            this.Close();
        }   
    }
}

抱歉帖子太长。感谢任何帮助。

一切正常,但问题是,当我选择要添加的产品时,第一个表单中没有添加任何内容,并且 datagridview 仍然是空白

c# winforms datagridview .net-8.0
1个回答
0
投票

您可以通过声明直接将 DataGridView 的数据源从 Form1 通过构造函数传递到 Form2。我假设您使用 DataTable 作为数据源。

表格1:

private void ItemsGridList_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == ItemsGridList.Columns["IDColumn"].Index && e.RowIndex >= 0)
    {
        DataTable Data = ItemsGridList.DataSource as DataTable;
        ItemsSelectionModeView itemsSelectionModeView = new ItemsSelectionModeView(Data);
        itemsSelectionModeView.ShowDialog();
    }
}

形式2:您可以通过声明一个DataTable变量来接收值来完成以下操作。

 private DataTable Data;
 public ItemsSelectionModeView(DataTable dt)
    {
        InitializeComponent();
        this.Data = dt;
    }

此时,您的新 DataTable Data 正在接收来自 Form1 中的 DataTable 的输入。直接添加数据即可处理。

 public void ItemsListGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        NewPurchaseInvoiceView newPurchaseInvoiceView = new NewPurchaseInvoiceView();

        foreach (DataGridViewRow dataGridViewRow in ItemsListGridView.SelectedRows)
        {
            DataRow dr =Data.NewRow();
            
            dr["YourFieldNameNeed"]= dataGridViewRow.Cells[1].Value.ToString(); 
                dr["YourFieldNameNeed2"]= dataGridViewRow.Cells[2].Value.ToString(); 
            Data.Rows.Add(dr);
        }
        this.Close();
    }   

你可以尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.