【个人机房重构】——删除DataGridView选中行并更新数据库㈢

【个人机房重构】——删除DataGridView选中行并更新数据库㈢前两篇文章介绍了一下使用Datagridview控件

    前两篇文章介绍了一下DataGridView控件绑定数据的使用,从中我们可以体会到Datagridview控件的强大。这篇文章呢,我们说一下如何删除DataGridView选中行并更新数据库。


一、实际操作


    在“添加删除用户”的窗体中,我们会用到删除DataGridView控件中的数据这项功能。在界面上删除记录的同时,也要在数据库中把相应的数据进行删除。在这里就是根据“用户名”这个主键,把它传到实体中,然后在D层中进行数据库的删除操作。

    首先,对插入的DataGridView控件进行相应的设置,列、列名(设置详情请看上一篇博客);

    然后,开始进行代码的编写:


U层


<span style="font-family:KaiTi_GB2312;font-size:18px;">    '自定义一个删除DataGridView记录的方法,Del
    Public Sub Del()
        Dim k As Integer = Me.DataGridView1.SelectedRows.Count
        Dim EUser As New Entity.UserInfoEntity
        Dim BUser As New BLL.AddRemoveUserBLL

        'DataGridView中是否存在数据
        If DataGridView1.Rows.Count > 0 Then
            '从下往上删,避免沙漏效应
            For i As Integer = k To 1 Step -1
                '获取第N行的第一列的数据
                Dim usercode As String = DataGridView1.SelectedRows(i - 1).Cells("userID").Value.ToString()

                '判断该行用户是否为当前登录用户
                If frmLogin.txtUname.Text = usercode Then
                    MsgBox("当前用户不能被删除,请重新选择!", vbOKOnly + vbExclamation, "系统提示")
                    Exit Sub
                Else
                    '将usercode传值给EUser实体的userName属性,即根据用户名进行删除
                    EUser.userName = usercode
                End If

                '从数据库执行删除的操作
                If BUser.DelUser(EUser) Then
                    MsgBox("删除成功!", vbOKOnly + vbInformation, "系统提示")
                Else
                    MessageBox.Show("删除失败!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return
                End If

                Call showUser()
            Next
        Else
            DataGridView1.Rows.Clear()
        End If
    End Sub

    Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
        '选中记录则提示谨慎删除,没有选中则提示进行选择
        If Me.DataGridView1.SelectedRows.Count > 0 Then
            If MessageBox.Show("确定要删除选中的用户吗?删除后将不可恢复!!!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                Del()
            End If
        Else
            MessageBox.Show("请选择要删除的用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Return
        End If
    End Sub

    Private Sub cmbLevel_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbLevel.SelectedIndexChanged
        Call showUser() '调用showUser方法,
    End Sub

    '在DataGridView中显示数据的方法
    Public Sub showUser()
        Dim BUser As New BLL.AddRemoveUserBLL   '实例化B层的对象
        Dim EUser As New Entity.UserInfoEntity      '实例化实体层的对象
        Dim List As New List(Of Entity.UserInfoEntity)   '定义一个泛型集合

        EUser.Level = cmbLevel.Text    '将用户级别中的文本赋值给实体

        List = BUser.Check(EUser)

        '将泛型集合List中的数据,显示到DataFGridView控件上
        DataGridView1.DataSource = List

    End Sub</span>


B层


<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class AddRemoveUserBLL
    Function DelUser(ByVal user As Entity.UserInfoEntity) As Boolean
        Dim DUser As New DAL.AddRemoveUserDAL    '实例化D层的DUser对象
        Dim delResult As Boolean                 '定义一个布尔值

        delResult = DUser.DelUser(user)    '接收D层的返回值

        Return delResult   '返回到U层
    End Function

    Function Check(ByVal user As Entity.UserInfoEntity) As List(Of Entity.UserInfoEntity)
        Dim DUser As New DAL.AddRemoveUserDAL
        Dim List As New List(Of Entity.UserInfoEntity)    '实例化一个新的泛型集合

        List = DUser.Check(user)    'list调用D层的Check函数
        Return List    '返回泛型集合List
    End Function

End Class</span>


D层


<span style="font-family:KaiTi_GB2312;font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Public Class AddRemoveUserDAL
    '定义一个删除用户信息的函数,DelUser,返回值为布尔值
    Function DelUser(ByVal user As Entity.UserInfoEntity) As Boolean
        '定义一个操作数据库的助手类
        Dim MySqlHelper As New SqlHelper
        '定义一个对数据库的操作语句
        Dim strSql As String
        '定义SQL删除语句
        strSql = "Delete from T_UserInfo where userName=@userName"

        '加入参数
        Dim paras As SqlParameter() = {New SqlParameter("@userName", user.userName)}

        '执行查询,并返回查询结果
        Return MySqlHelper.ExecAddDelUpdate(strSql, CommandType.Text, paras)
    End Function

    '定义一个在DataGridView中显示的函数,Check  ,,,返回值为泛型集合
    Function Check(ByVal user As Entity.UserInfoEntity) As List(Of Entity.UserInfoEntity)
        '定义一个操作数据库的助手类
        Dim MySqlHelper As New SqlHelper
        '定义对数据库的操作语句
        Dim strSql As String
        strSql = "select * from T_UserInfo where level=@level"
        '加入参数
        Dim paras As SqlParameter() = {New SqlParameter("@level", user.Level)}

        '执行查询,并将查询结果保存在Dt中
        Dim dt As New DataTable
        dt = MySqlHelper.ExecSelect(strSql, CommandType.Text, paras)

        '将查询到的结果保存为泛型集合
        Dim myList As New List(Of Entity.UserInfoEntity)

        '进行判断,如果dt中有记录,则〉0
        If dt.Rows.Count > 0 Then   '有记录
            '将dt转换成泛型集合
            myList = ConvertHelper.convertToList(Of Entity.UserInfoEntity)(dt)
            Return myList     '返回泛型集合myList
        Else
            Return Nothing
        End If
    End Function
End Class</span>


实体层就略过了。


二、拓展


刚开始做的时候,在DataGridView中显示数据,老是把整张表都显示出来

【个人机房重构】——删除DataGridView选中行并更新数据库㈢


下边这条语句可以去掉不想让它显示的列

<span style="font-family:KaiTi_GB2312;font-size:18px;">'将不需要的列去掉
'DataGridView1.Columns.Remove("Pwd")</span>

当然,也可以在窗体加载的时候,给combobox赋值后,加上下边这条语句,同样也可以实现同样的效果。

<span style="font-family:KaiTi_GB2312;font-size:18px;">DataGridView1.AutoGenerateColumns = False '加载时禁止自动加载数据</span>


在下一篇文章中,我将介绍如何“将DataGridView中的数据导出到Excel表中”,敬请关注。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/34764.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注