VB.NET中DataGridView删除指定数据行,并更新数据库

来源:互联网 发布:桌游淘宝 编辑:程序博客网 时间:2024/05/12 11:08

收费系统需要这样一个功能:首先用DataGridView浏览所有用户信息,然后可以删除指定行的用户信息,最后更新这一变化。界面如图:

            

1、首先检测要删除的用户是否是当前正在使用的用户:

[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">'查看改用户是否正在被使用,若正在使用则不能删除  
  2.     If Trim(DGVuser.CurrentRow.Cells(0).Value) = frmLogin.txtUID.Text Then  
  3.     MsgBox("该用户正在使用,不能删除!", MsgBoxStyle.OkOnly, "正在使用")  
  4.         Exit Sub  
  5.     End If</SPAN>  

 2、然后在删除指定数据行:

[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">          '删除datagridview中的数据行  
  2.     'DGVuser.Rows.Remove(DGVuser.CurrentRow) 也可   
  3.     DGVuser.Rows.RemoveAt(DGVuser.CurrentRow.Index)</SPAN>  

3、建立一个模板类,用于传递数据:
[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">Public Class dm_datatable  
  2. Private _dt As DataTable  
  3.     Public Property DT As DataTable  
  4.     Get  
  5.         Return _dt  
  6.     End Get  
  7.     Set(ByVal value As DataTable)  
  8.         _dt = value  
  9.     End Set  
  10.     End Property  
  11. End Class</SPAN>  
[vb] view plaincopyprint?
  1. <SPAN style="WHITE-SPACE: normal"><SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px"> </SPAN></SPAN>  
4、用表示层,用模板类传递数据:
[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">Dim dt As New DataModel.dm_datatable  
  2. dt.DT = DGVuser.DataSource</SPAN>  
[vb] view plaincopyprint?
  1. <SPAN style="WHITE-SPACE: normal"><SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px"> </SPAN></SPAN>  
5、在数据访问层,编写修改数据库的函数:

[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">'删除指定用户  
  2. Public Function deleteUser(ByVal dm_dt As DataModel.dm_datatable) As Boolean  
  3. Dim connString As String = _  
  4. "Persist Security Info=true;Data Source=192.168.24.158;Initial Catalog=CR_Charge_SYS;User ID=sa;PWD=123456"  
  5. Dim sqlconn As New SqlConnection(connString)  
  6. Dim sqltxt As String = "select * from User_info"  
  7. Dim sqlcmd As New SqlCommand(sqltxt, sqlconn)  
  8. Dim da As New SqlDataAdapter(sqlcmd)  
  9. Dim ds As New DataSet  
  10. Dim dt As New DataTable  
  11. da.UpdateCommand = sqlcmd  
  12. Dim mybuilder As New SqlCommandBuilder(da)  
  13. Try  
  14.     dt = dm_dt.DT.Copy  
  15.     ds.Tables.Add(dt)  
  16.     sqlconn.Open()  
  17.     da.Update(ds, "User_info")  
  18.     Return True  
  19. Catch ex As Exception  
  20.     MsgBox(ex.Message)  
  21. Return False  
  22. Finally  
  23.     sqlconn.Close()  
  24.     sqlcmd = Nothing  
  25. End Try  
  26.     Return Nothing  
  27. End Function</SPAN>  
6、在业务逻辑层,编写传递数据访问层的函数:
[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">'删除指定用户  
  2. Public Function deleteUser(ByVal dt As DataModel.dm_datatable) As Boolean  
  3. Dim sqlUserInfo As New ChargeSystemDAL.dal_User_info  
  4.     Return sqlUserInfo.deleteUser(dt)  
  5. End Function</SPAN>  
7、最后,在表示层,调用业务逻辑层的函数:

[vb] view plaincopyprint?
  1. <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">Dim dt As New DataModel.dm_datatable  
  2. '数据更改更新到数据库   
  3. If bllUserinfo.deleteUser(dt) = True Then  
  4. MsgBox("成功删除用户!", MsgBoxStyle.OkOnly, "成功")  
  5. Exit Sub  
  6. Else  
  7. MsgBox("未能成功删除用户,详情请咨询管理员!", MsgBoxStyle.OkOnly, "失败")  
  8. Exit Sub  
  9. End If</SPAN>  
    在5中,如果直接这样调用:ds.Tables.Add(dm_dt.DT),则会产生错误:DT已存在DataSet。所以dm_dt.DT复制后才能为ds所使用。
0 0
原创粉丝点击