如何使用 C# 使用 Button 复制(克隆)Datagridview 中的现有行 ASP.NET

How to duplicate (clone) existing Row in Datagridview with Button using C# ASP.NET

我有一个带有按钮的列的 DataGridView。

现在我希望每次单击按钮时,DataGridView 中的选定行都会被复制并直接插入到选定行之后。

我想复制所有列的所有值并将这一新行插入到我的数据库的 table 中。

我如何实现这一点?

非常感谢。

在我下面的代码中,错误是在这一行

cgv.Rows.Add(gvRow.Cells[1].Text);

<asp:GridView runat="server" ID="gvCustomers" AutoGenerateColumns="false"
    OnSelectedIndexChanged="OnSelectedIndexChanged">
    <Columns>

<asp:TemplateField ItemStyle-HorizontalAlign="Center">
    <ItemTemplate>
    <asp:ImageButton ID="btselect" runat="server"
         CommandName="Select"
         OnClick="Copy"
         ImageUrl="/aspnet/img/clone_icon.gif"
         ToolTip="Clone row" />
    </ItemTemplate>
</asp:TemplateField>    
    <asp:BoundField DataField="CustomerId" HeaderText="ID" />    
</Columns>
</asp:GridView>

    protected void Copy(object sender, EventArgs e)
    {
        GridViewRow gvRow = this.gvProducts.SelectedRow;
        DataTable cgv = null;
        if (ViewState["Customers"] != null)
        {
            cgv = ViewState["Customers"] as DataTable;
            cgv.Rows.Add(gvRow.Cells[1].Text);
            ViewState["Customers"] = cgv;
        }

        BindData();
    }

    protected void gvProducts_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.gvProducts.SelectedRow.BackColor = System.Drawing.Color.Cyan;
    }

好的,您尝试将数据行添加到数据源或您在会话中持久保存的数据表,您的位置很好。

所以,我会这样做:

protected void Copy(object sender, EventArgs e)
{
    GridViewRow gvRow = this.gvProducts.SelectedRow;
    DataTable cgv = null;
    if (ViewState["Customers"] != null)
    {
        cgv = ViewState["Customers"] as DataTable;
        DataRow MyNewRow = cgv.NewRow()
        MyNewRow["FirstName"] = gvRow.Cells[2].Text;
        MyNewRow["LastName"] = gvRow.Cells[3].Text;
        MyNewRow["CustomerID"] = gvRow.Cells[0];
        cgv.Rows.Add(MyNewRow);

        ViewState["Customers"] = cgv;
    }

    BindData();
}

请记住,GV 中的任何模板字段都需要使用查找控件,但从您发布的内容来看,使用 .cells[] 集合似乎确实适合您。