C# 将Datagridview行从一个网格添加到另一个网格

C# 将Datagridview行从一个网格添加到另一个网格,c#,datagridview,C#,Datagridview,我有两个表单Form1(DGV1)和Form2(DGV2),两个表单上都有Datagridview控件 在Form1上有一个指向Form2的按钮链接,用户可以在其中向Form1 datagridview(DGV1)添加行 …在Form2 Datagridview中,第一列中有一个复选框,用户一次只能选择一行。因此,Form2上有两个按钮1)完成2)添加项目 当用户通过依次选择行来单击“添加项”时,必须将行添加到Form1上的datagridview中,当单击“完成”按钮时,Form1应显示所有添

我有两个表单Form1(DGV1)和Form2(DGV2),两个表单上都有Datagridview控件

在Form1上有一个指向Form2的按钮链接,用户可以在其中向Form1 datagridview(DGV1)添加行 …在Form2 Datagridview中,第一列中有一个复选框,用户一次只能选择一行。因此,Form2上有两个按钮1)完成2)添加项目

当用户通过依次选择行来单击“添加项”时,必须将行添加到Form1上的datagridview中,当单击“完成”按钮时,Form1应显示所有添加的行

int index = objQM.gvItemDetails.Rows.Add();
int Sno = index + 1;
string Desc = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
int Sellqty = LoadSellQty();
 decimal UnitCost = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
 decimal Amount = LoadSellQty() * UnitCost;
 objQM.gvItemDetails.Rows.Insert(index,false, Sno, Desc, Sellqty, UnitCost, Amount);
我可以在Form1 datagridview中添加一行,但添加第二行时,先前添加的行将丢失

你能提出一个解决这个问题的方法吗


多谢各位

您正在为父网格中的
gvInventory
中选择的每一行添加两行(这是想要的工作方式吗?),如果不是,请尝试以下操作:

int index = objQM.gvItemDetails.Rows.Add();
DataGridViewRow row = objQM.gvItemDetails.Rows[index]; //here you get a reference to added row
row.Cells[0] = false;
row.Cells[1] = index + 1; //old Sno
row.Cells[2] = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
row.Cells[3] = LoadSellQty();
row.Cells[4] = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
row.Cells[5] = LoadSellQty() * UnitCost;

这样可以添加新行并用值填充它。从您提供的代码来看,不清楚第一行丢失的原因,所以我可能需要更多的信息

只需澄清:
objQM.gvItemDetails
是DGV1,而
gvInventory
是DGV2?一次只能添加一行(选中的一行(“在Form2 Datagridview中,第一列中有一个复选框,用户一次只能选择一行。”)?这是处理行添加的所有代码吗?是的,你是对的..gvItemDetails是父网格,gvInventory是子网格。首先,我要检查是否在gvInventory网格中选中该复选框。if(Convert.ToBoolean(gvInventory.Rows[RowIndex].Cells[0].FormattedValue)){是的,我注意到它在父网格中添加了两行。谢谢。当我尝试将datagridview行添加到gvItemDetails时,如下所示objQM.gvItemDetails.rows.add(row);它抛出一个错误,它属于datagridview控件。你能帮我一下我哪里出错了,因为你正在尝试再次添加它!:)此行
int index=objQM.gvItemDetails.Rows.Add();
添加新行并返回其索引,下一行将填充数据,即:)。我已将代码更改为objQM.gvItemDetails.Rows[index].Clone()它工作起来很酷。但是问题是创建了一个额外的行。所以我如何避免它。正如您所提到的行int index=objQM.gvItemDetails.Rows.Add();正在创建一个额外的虚拟行。任何替代方法。嗨,gzaxx…我在代码中做了一个小改动,效果很好。我添加了这行objQM.gvItemDetails.Rows.Add();没有int索引,创建了一个静态变量int index,并在插入时增加了它的值。谢谢。