Exclua várias linhas de dados no DataGridView e atualize para o banco de dados sql

A postagem do blog anterior apresentou a exclusão de dados no DataGridView em detalhes, e as demonstrações foram baseadas em exclusão verdadeira e exclusão falsa.Para obter detalhes, consulte:
https://blog.csdn.net/qq_39217004/article/details/105366769

Exclua várias linhas de dados no DataGridView e atualize para o banco de dados sql

A seguir, demonstramos a implementação da exclusão de várias linhas de dados no controle: (indicado pela coluna de bit de exclusão falsa, a exclusão verdadeira precisa apenas alterar a instrução sql)
Os resultados da demonstração serão descritos mais adiante, primeiro observe o processo de implementação:
// Seleção do mouse para excluir Os dados
// Obtém o StuId dos dados a serem excluídos
// Julga o número de opções, se o número de opções for maior que 0, exclua, caso contrário, ele solicitará que nenhuma seleção
// operação de exclusão inicie a transação no código

1. Use o mouse para selecionar os dados a serem excluídos e obter o StuId dos dados a serem excluídos.

 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. Determine o número de opções, se o número de opções for maior que 0, exclua; caso contrário, ele solicitará que você não optou por
usar a classe SqlTransaction para iniciar uma transação, a seguir, um link de referência específico de uso fixo
/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;
  }

Primeiro, atravesse a classe genérica, passe os parâmetros para SqlParameter e, em seguida, envie a transação e retorne o número de linhas afetadas;
observe que a captura de exceção na captura tem a seguinte instrução, que é o uso fornecido pelo Microsoft
trans.Rollback (); // catch Uso, reverta a transação do estado suspenso
Nota: Ele
deve ser limpo toda vez que o loop passar 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;
 }

Se o número de linhas afetadas retornadas acima for o mesmo que o valor na classe genérica (o número de linhas que você selecionou manualmente), você será solicitado a excluir com êxito e excluir as informações selecionadas no 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;
}

Observe que o método de remover as informações selecionadas:

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

Por exemplo, após selecionar 1002 1004 1005 (StuId) três linhas de informações
, após executar esta frase,

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

Insira a descrição da imagem aqui
Neste ponto, o processo de código foi mostrado

A seguir, é apresentada uma demonstração dos resultados alcançados:

1. Informações iniciais no banco de dados
Insira a descrição da imagem aqui
2. Carregar informações
na interface do computador host Selecione o número de linhas a serem excluídas na caixa de seleção, clique no botão "Excluir" e, em seguida, clique em "OK"
Insira a descrição da imagem aqui
3. As três linhas de dados selecionados na interface desaparecem
Insira a descrição da imagem aqui
4. Verifique o banco de dados as informações, clique na "implementação", você pode ver a bandeira de dados selecionado tem três linhas 1, por falsa excluído com sucesso
Insira a descrição da imagem aqui
5. quando iniciar o programa novamente, e em seguida, elimine essa informação não é exibida na tela voltam
Insira a descrição da imagem aqui

Neste ponto, a função de excluir várias linhas de informação foi totalmente realizada;
você pode criticar e corrigir! !

Publicado 18 artigos originais · elogiado 0 · visitas 233

Acho que você gosta

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