DataGridViewで複数行のデータを削除し、SQLデータベースに更新する

以前のブログ投稿では、DataGridViewでのデータの削除について詳しく説明し、デモは真の削除と偽の削除に基づいていました。詳細については、
https //blog.csdn.net/qq_39217004/article/details/105366769 を参照してください。

DataGridViewで複数行のデータを削除し、SQLデータベースに更新する

以下は、コントロール上のデータの複数行削除の実装を示しています:(偽の削除ビット列で示され、真の削除はSQLステートメントを変更するだけで十分です)
デモの結果は後で説明されます。最初に実装プロセスを見
てください。//削除するマウスの選択データ
//削除するデータのStuId 取得
//選択肢の数を判断し、選択肢の数が0より大きい場合は削除します。それ以外の場合は、選択を
削除しないことを確認します//削除操作でコード内のトランザクションを開始します

1.マウスを使用して削除するデータを選択し、削除するデータのStuIdを取得します

 List<int> listIds = new List<int>();//定义一个泛型 存储要删除的Id号
 for (int i = 0; i < dgvStudents.Rows.Count; i++)//遍历表中的所有行数,获取选中的行数据
 {
     DataGridViewCheckBoxCell cell = dgvStudents.Rows[i].Cells["colCheck"] as DataGridViewCheckBoxCell;//获取复选框
     //若cell.Value值为 null,即没选中任何行,则chk为false,否则只要选中了某一行,则返回true
     bool chk = Convert.ToBoolean(cell.Value);//若选中的数量不为0
     if (chk)
     {
         //获取行数据并把数据存储在listIds泛型中
         DataRow dr = (dgvStudents.Rows[i].DataBoundItem as DataRowView).Row;
         int stuId = (int)dr["StuId"];
         listIds.Add(stuId);
     }
 }

2.選択肢の数を判断し、選択肢の数が0より大きい場合は削除します。それ以外の場合
は、SqlTransactionクラスを使用してトランザクションを開始することを選択しなかったことを示します。以下は、固定された使用法の特定の参照リンク
/https://docs.microsoft.com/zh-cnです。 /dotnet/api/system.data.sqlclient.sqltransaction?view=netframework-4.8

  using (SqlConnection conn =new SqlConnection(SqlHelper.connString))
 {
     //事务启动是通过conn来开启
     conn.Open();
     SqlTransaction trans = conn.BeginTransaction();//开启一个事务
     SqlCommand cmd = new SqlCommand(); //利用SqlCommand执行事务
     //固定用法
     //为挂起的本地事务将事务对象和连接都分配给命令对象
     cmd.Connection = conn;
     cmd.Transaction = trans;
  }

最初に、ジェネリッククラスを走査し、パラメーターをSqlParameterに渡し、トランザクションをコミットして、影響を受ける行数を返します。catch
の例外キャッチには次のステートメントがあることに注意してくださいこれは、Microsoft
trans.Rollback(); //特定のキャッチ使用方法。トランザクションを中断状態からロールバックします。
注:ループがパラメーターを渡すたびに、トランザクションを
クリアする必要があります。

 try
 {                          
     foreach (int id in listIds)
     {
         //cmd.CommandText = "delete from StudentInfo where StuId=@StuId";//真删除
         cmd.CommandText = "update StudentInfo set IsDeleted=1 where StuId=@stuId";//假删除
         SqlParameter para = new SqlParameter("@StuId",id);
         cmd.Parameters.Clear();
         cmd.Parameters.Add(para);
         count += cmd.ExecuteNonQuery();
     }
     trans.Commit();//提交事务,代表所有的事务已经提交到数据库
     Console.WriteLine("Both records are written to database.");
 }
 catch (SqlException ex)
 {
     trans.Rollback();//catch特定用法,从挂起状态滚回事务
     MessageBox.Show(ex.Message, "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
     return;
 }

上記で返された影響を受ける行の数がジェネリッククラスの値(手動で選択した行の数)と同じである場合、正常に削除するように求められ、datagridviewで選択した情報を削除します

if (count == listIds.Count)
{
    MessageBox.Show("选中的学生信息删除成功", "删除学生信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    //列表的手动刷新
    DataTable dtStudents = (DataTable)dgvStudents.DataSource;//获取数据源
    string idStr = string.Join(",",listIds);
    DataRow[] rows = dtStudents.Select("StuId in (" + idStr + ")");
    foreach (DataRow dr in rows)
    {
        dtStudents.Rows.Remove(dr);
    }
    dgvStudents.DataSource = dtStudents;
}

選択した情報を削除する方法は次のとおりです。

//是把选中的信息用,做字符串分隔,
string idStr = string.Join(",",listIds);
//要用来筛选行的条件    具体请参考ataView RowFilter 语法
DataRow[] rows = dtStudents.Select("StuId in (" + idStr + ")");

たとえば、1002 1004 1005(StuId)の3行の情報
を選択した後、この文を実行した後、

idStr =1002,1004,1005//筛选条件
"StuId in "1002,1004,1005""

ここに画像の説明を挿入
この時点で、コードプロセスは示されています

以下は、達成された結果のデモンストレーションです。

1.データベースの初期情報
ここに画像の説明を挿入
2.ホストコンピュータのインターフェースに情報
ロードするチェックボックスで削除する行数を選択し、[削除]ボタンをクリックして[OK]をクリックします
ここに画像の説明を挿入
。3
ここに画像の説明を挿入
インターフェースで選択した3行のデータが消えます4.データベースを確認します情報、「実行」をクリックすると、選択した3行のデータフラグがすでに1であることがわかります。これは、誤った削除が成功したことを意味します
ここに画像の説明を挿入
。5 プログラムを再度開始すると、削除により、情報がインターフェースに表示されなくなります。
ここに画像の説明を挿入

この時点で、複数行の情報を削除する機能は完全に実現されています;
批判して修正することができます!

元の記事を18件公開しました 賞賛されました0 訪問数233

おすすめ

転載: blog.csdn.net/qq_39217004/article/details/105388283