C# 如何使用按钮复制Datagridview中的行

C# 如何使用按钮复制Datagridview中的行,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView,其中有一列填充了按钮。现在,我希望每次单击按钮,DataGridView中的选定行都会被复制并直接插入到选定行的后面。但是:我只想复制两个特定列的值。在这两个特定的列之间,应该用数字进行计数,从手动输入的1开始,到每次单击“复制”按钮时输入的2、3、4等等。其他列应为空。我怎样才能意识到这一点 非常感谢,我希望它能起作用 // Enable AllowUserToAddRows dgv.AllowUserToAddRows = true; privat

我有一个DataGridView,其中有一列填充了按钮。现在,我希望每次单击按钮,DataGridView中的选定行都会被复制并直接插入到选定行的后面。但是:我只想复制两个特定列的值。在这两个特定的列之间,应该用数字进行计数,从手动输入的1开始,到每次单击“复制”按钮时输入的2、3、4等等。其他列应为空。我怎样才能意识到这一点

非常感谢,我希望它能起作用

// Enable AllowUserToAddRows
dgv.AllowUserToAddRows = true;

    private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        DataGridView dgv = sender as DataGridView;

        // If button clicked
        if (e.ColumnIndex == 0)
        {
            // Get values what you want to use, the Cell 2 is already increased
            var value1 = dgv.Rows[e.RowIndex].Cells[1].Value;
            var value2 = dgv.Rows[e.RowIndex].Cells[2].Value;

            // Define the maximum id and the row index of it
            int maxId = Convert.ToInt32(value2);
            int latestRowIndex = e.RowIndex;

            for (int i = 0; i < dgv.Rows.Count; i++)
            {
                // Select the highest id of selected item and get its row index
                if (dgv.Rows[i].Cells[1].Value == value1)
                {
                    maxId = Convert.ToInt32(dgv.Rows[i].Cells[2].Value);
                    latestRowIndex = i;
                }
            }

            // Insert a new row behind max id one
            dgv.Rows.Insert(latestRowIndex + 1);

            // Set the previously stored values and increase the stored Cell 2 value
            dgv.Rows[latestRowIndex + 1].Cells[1].Value = value1;
            dgv.Rows[latestRowIndex + 1].Cells[2].Value = maxId + 1;
        }
    }
//启用AllowUserToAddress
dgv.allowUserToAddress=true;
私有void dgv_CellClick(对象发送方,DataGridViewCellEventArgs e)
{
DataGridView dgv=作为DataGridView的发送方;
//如果按钮被点击
如果(e.ColumnIndex==0)
{
//获取要使用的值,单元格2已增加
var value1=dgv.Rows[e.ROWDINDEX]。单元格[1]。值;
var value2=dgv.Rows[e.ROWDINDEX]。单元格[2]。值;
//定义最大id及其行索引
int maxId=Convert.ToInt32(值2);
int latestRowIndex=e.RowIndex;
对于(int i=0;i
显示迄今为止为获得结果而编写的一些代码?您无法向gridview添加行。您可以将新项目或行添加到网格视图绑定到的基础数据源。@er-sho:我没有代码显示,因为它只是用Visual Studio中的设计器创建的datagridviewStudio@ChetanRanpariya:您可以将行添加到GridView(AllowUserstoAddRows)@Adir以重新表述er-sho:您尝试了什么?非常感谢!这很有效。我还有一个问题。我希望特定单元格的值随着按钮上的每次点击而增加。例如:如果单元格2的值为1。我希望在这个函数中的每个klick中,该特定行的值将计数为2,下一个重复行的值将计数为3。你能帮我吗?不客气。新问题的答案已编辑。@Joszef我有个小问题。由于格式异常,首先我需要将其转换为int。我用Convert.ToInt32完成了这项工作,它起了作用。加上一点保管,你的代码运行得很好,但我只有一个问题。如果我现在从第一行开始,它会工作,并且每次增加1。但它在我的桌子上走错了方向。如果我增加5倍,第一行单元格2显示:5,4,3,2,1。所以我只需要在另一个方向展示它。我该怎么做?再次感谢!请看编辑后的答案。如果这不是正确的答案,请让我知道。遗憾的是,这不是答案。正如我之前所说的,在你的代码版本中,它从3开始计数,而在我编辑的版本中,它从1开始计数,但必须进行一些更改,以显示第一行中的1和下一行中的2,依此类推。输出必须正好相反,才能从第一行1开始显示,第二行添加2,第三行添加3,依此类推。在这种情况下,我首先在单元格中输入1,但如果我单击我的按钮,则在第二行中输入1,第一行增加到2。