我正在开发一个 .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 仍然是空白
您可以通过声明直接将 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();
}
你可以尝试一下。