DataGridView 数据表复制-保留-添加-更新行

本文关键字:更新 添加 保留 复制 DataGridView 数据表 | 更新日期: 2023-09-27 17:56:13

我正在开发Windows应用程序(环境:Visual Studio 2010和C#)我使用数据网格视图,其中包含由数据表 dt 完成的记录:

 dataGridView1.DataSource = dt;

此数据表有 20 列,其中 1 个标识列 - 列 [0] = 自动编号,以及名为"记录检查"的列 [1],实现为布尔值(复选框)。

我需要解决下一个问题:

  1. 选择按列[2]过滤的行(在代码示例中:DrawingNo='DM-3012');
  2. 保留这些记录
  3. 在现有记录下方添加完全相同的记录,但更新列[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;

谢谢

DataGridView 数据表复制-保留-添加-更新行

我想

我找到了解决这个问题的好方法。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);

那行得通!