Eliminar varias filas de datos en DataGridView y actualizar a la base de datos SQL

La publicación de blog anterior introdujo la eliminación de datos en DataGridView en detalle, y las demostraciones se basaron en la eliminación verdadera y la eliminación falsa. Para obtener más información, consulte:
https://blog.csdn.net/qq_39217004/article/details/105366769

Eliminar varias filas de datos en DataGridView y actualizar a la base de datos SQL

A continuación se muestra la implementación de la eliminación de líneas múltiples de datos en el control: (indicado por la columna de bits de eliminación falsa, la eliminación verdadera solo necesita cambiar la instrucción sql)
Los resultados de la demostración se describirán más adelante, primero mire el proceso de implementación:
// Selección del mouse para eliminar Los datos
// Obtenga el StuId de los datos a eliminar
// Juzgue el número de opciones, si el número de opciones es mayor que 0, elimine, de lo contrario, indica que ninguna
operación de selección // eliminar inicia la transacción en el código

1. Use el mouse para seleccionar los datos que se eliminarán y obtenga el StuId de los datos que se eliminarán

 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. Juzgue el número de opciones, si el número de opciones es mayor que 0, elimine, de lo contrario, le indica que no eligió
usar la clase SqlTransaction para iniciar una transacción, el siguiente es un enlace de referencia específico de uso fijo
/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;
  }

Primero, atraviese la clase genérica, pase los parámetros a SqlParameter y luego confirme la transacción y devuelva el número de filas afectadas;
tenga en cuenta que la excepción catch en la captura tiene la siguiente instrucción, que es el uso proporcionado por Microsoft
trans.Rollback (); // captura específica Uso, revierta la transacción desde el estado suspendido
Nota:
Debe borrarse cada vez que el ciclo pasa parámetros;

 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;
 }

Si el número de filas afectadas devuelto anteriormente es el mismo que el valor de la clase genérica (el número de filas que seleccionó manualmente), se le solicitará que elimine con éxito; y elimine la información seleccionada en 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;
}

Tenga en cuenta que el método para eliminar la información seleccionada:

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

Por ejemplo, después de seleccionar 1002 1004 1005 (StuId) tres líneas de información
, después de ejecutar esta oración,

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

Inserte la descripción de la imagen aquí
En este punto, el proceso de código ha sido mostrado

La siguiente es una demostración de los resultados alcanzados:

1. Información inicial en la base de datos
Inserte la descripción de la imagen aquí
2. Cargar información
en la interfaz de la computadora host Seleccione el número de filas que se eliminarán en la casilla de verificación, haga clic en el botón "Eliminar" y luego haga clic en "Aceptar"
Inserte la descripción de la imagen aquí
3. Las tres filas de datos seleccionados en la interfaz desaparecen
Inserte la descripción de la imagen aquí
4. Compruebe la base de datos la información, haga clic en la "aplicación", se puede ver el indicador de datos seleccionado tiene tres líneas 1, por falsa eliminado correctamente
Inserte la descripción de la imagen aquí
5. al iniciar el programa de nuevo, y luego eliminar esa información no se visualiza en la pantalla el regreso
Inserte la descripción de la imagen aquí

En este punto, la función de eliminar múltiples líneas de información se ha realizado completamente;
¡puede criticar y corregir! !

Publicado 18 artículos originales · elogiado 0 · visitas 233

Supongo que te gusta

Origin blog.csdn.net/qq_39217004/article/details/105388283
Recomendado
Clasificación