DataGridView ——管理员对用户的那点操作
2020-12-13 02:57
标签:datagridview style class blog code http 记得第一次做机房收费系统的时候,就在添加删除用户这出现了点小问题,因为一直都是一个容不得一点瑕疵的人,所以对查询用户的时候查询一次就会多一些空行我很是不能容忍,看似很小的问题,我却花了很长的时间。现在机房收费系统重构了,又在这块吹毛求疵了,用了整整两个小时的时间。解决了好多好多小问题。 (1)为什么总是显示第一行数据? 用了SqlHelper查询到某一级别的用户返回给U层,就是传统的三层查询思想,当时查询出来后有一点小小的窃喜,但是当添加用户添加的多了,利用DataGridView怎么都是只显示第一行数据。 看看我原来的代码:
每次DataTable返回来的数据都是查询到的一个表,而只是把DataTable的第一行的某个自动赋给前面DataGridView的一个列,当数据只有一行的时候这固然没有错,但是数据行数多了就会出现错误。这是因为没有一个循环或者嵌套把每一行的数据都添加到DataGridView中。 解决方案:利用循环嵌套语句,把返回来的datatable表这个的数据分别赋值给DataGridView表。 (2)为什么没点击一次combo的选项就会多出很多空行?
这是因为每次查询之前没有把DataGridView中的行都清理掉,也就是一句代码而已:
(3)为什么每次都会显示最后一行为空行呢? 问题一个一个的解决,问题也在一个一个的被发现。当大面积的空行去掉了,最后还有一个小尾巴空行。以我的性格是必须把它去掉的。
这是因为DataGridView控件,使用的都是默认的属性,这最后的空行就是一个默认属性,那么怎样去掉它呢? 解决方案: (4)DatagridView的其他操作 删除选中的行,那删除用户来说,既要删除DataGridView表的行同时要删除数据库中的数据。 选中DataGridView的多行然后操作 删除DataGridView的所有行,拿删除用户来说: (5)DataGridView的其它常用操作: 例如:取得当前单元格的行的索引,从0开始
这只是我的关于DataGridView目前操作的理解,还有很多对DataGridView的常用用法:
http://blog.sina.com.cn/s/blog_97b9841901011u0u.html
http://www.cnblogs.com/wintalen/archive/2010/12/13/1904536.html 小结:在机房收费系统重构的时候会经常使用到DataGridView控件,所以掌握好一个控件的使用方法很重要,它相当于一个承载了我们需要可视给用户的一个篮子,将需要查询的数据显示在这个篮子上,让用户很清晰的明了信息,并且很方便的进行对数据的操作。 DataGridView ——管理员对用户的那点操作,搜素材,soscw.com DataGridView ——管理员对用户的那点操作 标签:datagridview style class blog code http 原文地址:http://blog.csdn.net/xdd19910505/article/details/28640809 Dim userbll As Bll.UserManager = New Bll.UserManager()
Dim dt As New DataTable
dt = userbll.SelectLevelUser(user) '现在直接调用B层
DataGridView.AllowUserToAddRows = False '去掉最后一行的空行,每次查询执行前去掉空行
'将查询到该级别用户显示到DataGridVIew中
If dt.Rows.Count > 0 Then
'DataGridView.Rows(0).Cells("用户ID").Value = dt.Rows(0)("用户名")
'DataGridView.Rows(0).Cells("用户名").Value = dt.Rows(0)("姓名")
'DataGridView.Rows(0).Cells("开户人").Value = dt.Rows(0)("开户人")
Else
'没有查到内容时
DataGridView.Rows.Clear()
MsgBox("没有查到记录!")
End If
这两当dt.Rows.Count > 0 之后说明查询到用户记录,但是不管查到多少条记录,当datatable返回一个查到的用户表给U层之后,接下来的代码就是显示的第一行的记录。所以就是在这里犯了错误。看到有些人的博客就是这样写的,可能是因为一开始添加的记录都比较少吧!
If dt.Rows.Count > 0 Then
'DataGridView.Rows(0).Cells("用户ID").Value = dt.Rows(1)("用户名")
'DataGridView.Rows(0).Cells("用户名").Value = dt.Rows(1)("姓名")
'DataGridView.Rows(0).Cells("开户人").Value = dt.Rows(1)("开户人")
'查到内容显示
For i = 0 To dt.Rows.Count - 1
DataGridView.Rows.Add() '一开始没有行和列,所以要添加一行和一列,避免发生错误
For j = 0 To dt.Columns.Count - 1
DataGridView(j, i).Value = dt.Rows(i).Item(j)
Next j
'DataGridView.AllowUserToAddRows = False '如果放在这里,还是会有最后一行
Next i
Else
DataGridView.Rows.Clear()
MsgBox("没有查到记录!")
End If
DataGridView.Rows.Clear()
DataGridView.AllowUserToAddRows = False
去掉空行以后,当所有问题都解决后:
If intRows > 0 Then
For intDelRow = intRows To 1 Step -1 '从下往上删除,防止漏行
strUserID = DataGridView.SelectedRows(intDelRow - 1).Cells("用户ID").Value.ToString()
'如果该用户正在工作,则不能删除
Dim s As String
s = FrmLogin.txtUserID.Text()
If FrmLogin.txtUserID.Text = strUserID.Trim() Then
'If strUserID.Trim() = FrmLogin.txtUserName.Text Then
MsgBox("该用户正在工作,不能删除", vbOKOnly + vbExclamation, "提示")
Exit Sub
Else
user.UserID = strUserID '将要删除的用户ID传给实体
intResult = deletebll.DeleteUser(user) '同时将该实体的信息从数据库中删除
'intResult = deletefac.DeleteUser(enUser)
If intResult > 0 Then '将数据库中所删除的对应的信息在dataGridView表中也删除
MsgBox("删除失败", vbOKOnly + vbExclamation, "提示")
Else
DataGridView.Rows.RemoveAt(DataGridView.SelectedRows(intDelRow - 1).Index)
MsgBox("删除成功", vbOKOnly + vbExclamation, "提示")
End If
End If
Next
Else
DataGridView.Rows.Clear()
End If
(dataGridView1.CurrentCell.RowIndex).ToString()
行列的隐藏:
// DataGridView1的第一列隐藏
DataGridView1.Columns[0].Visible = false;
// DataGridView1的第一行隐藏
DataGridView1.Rows[0].Visible = false;