DataGridView 数据表复制-保留-添加-更新行
本文关键字:更新 添加 保留 复制 DataGridView 数据表 | 更新日期: 2023-09-27 17:56:13
我正在开发Windows应用程序(环境:Visual Studio 2010和C#)我使用数据网格视图,其中包含由数据表 dt 完成的记录:
dataGridView1.DataSource = dt;
此数据表有 20 列,其中 1 个标识列 - 列 [0] = 自动编号,以及名为"记录检查"的列 [1],实现为布尔值(复选框)。
我需要解决下一个问题:
- 选择按列[2]过滤的行(在代码示例中:DrawingNo='DM-3012');
- 保留这些记录
- 在现有记录下方添加完全相同的记录,但更新列[2]具有不同的值,例如DrawingNo='DM-3013'(因此我们将多两倍记录)
我从将记录从一个数据表复制到另一个数据表开始(请参阅下面的代码)——这段代码工作正常,但随后堆叠了如何在现有数据表下添加复制的记录,然后更新它们:
DataTable dtSource = ((DataTable)dataGridView1.DataSource);
DataTable dtTarget = new DataTable();
dtTarget = ((DataTable)dataGridView1.DataSource).Clone();
DataRow[] rowsToCopy;
rowsToCopy = ((DataTable)dataGridView1.DataSource).Select("DrawingNo='DM-3012'");
foreach (DataRow temp in rowsToCopy)
{
dtTarget.ImportRow(temp);
}
dt = dtTarget;
谢谢
我想
我找到了解决这个问题的好方法。1. 创建存储过程 (mySP)。
此 SP 创建临时表,我们在其中查找使用子句"WHERE DrawingNo = @CopyFrom"选择的所有记录。
然后,此 SP 使用如下语句更新临时表:
更新 #TempTbl1 设置"已检查"= 0,"绘图编号"= @CopyTo"其中"绘图编号"= @CopyFrom。然后,SP 将临时表中更新的记录插入到主表中。
最后,SP 删除临时表并从主表中选择所有需要的记录。2.现在我们可以在应用程序中运行此SP,并将数据绑定到数据网格视图,例如:
//Run SP
using (SqlCommand cmd = new SqlCommand("mySP", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CopyFrom", SqlDbType.VarChar).Value = sValueFrom;
cmd.Parameters.Add("@CopyTo", SqlDbType.VarChar).Value = sValueTo;
con.Open();
cmd.ExecuteNonQuery();
}
//Create SELECT statement
string strSelect = "SELECT Recid, RecChecked, DrawingNo, ... FROM Tbl1 WHERE DrawingNo = '" + sValueTo + "'"
//fill dataadapter
sda = new SqlDataAdapter(@strSelect, con);
dt = new DataTable();
sda.Fill(dt);
那行得通!