如何使用 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[] 集合似乎确实适合您。
我有一个带有按钮的列的 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[] 集合似乎确实适合您。