DataGridView ——管理员对用户的那点操作
记得第一次做机房收费系统的时候,就在加入删除用户这出现了点小问题,由于一直都是一个容不得一点瑕疵的人。所以对查询用户的时候查询一次就会多一些空行我非常是不能容忍。看似非常小的问题,我却花了非常长的时间。如今机房收费系统重构了。又在这块吹毛求疵了,用了整整两个小时的时间。
攻克了好多好多小问题。
(1)为什么总是显示第一行数据?
用了SqlHelper查询到某一级别的用户返回给U层。就是传统的三层查询思想。当时查询出来后有一点小小的窃喜。可是当加入用户加入的多了,利用DataGridView怎么都是仅仅显示第一行数据。
看看我原来的代码:
<span style="font-size:14px;">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)("username")
'DataGridView.Rows(0).Cells("username").Value = dt.Rows(0)("姓名")
'DataGridView.Rows(0).Cells("开户人").Value = dt.Rows(0)("开户人")
Else
'没有查到内容时
DataGridView.Rows.Clear()
MsgBox("没有查到记录!")
End If</span>
这两当dt.Rows.Count > 0 之后说明查询到用户记录,可是无论查到多少条记录。当datatable返回一个查到的用户表给U层之后,接下来的代码就是显示的第一行的记录。所以就是在这里犯了错误。
看到有些人的博客就是这样写的。可能是由于一開始加入的记录都比較少吧。
每次DataTable返回来的数据都是查询到的一个表,而仅仅是把DataTable的第一行的某个自己主动赋给前面DataGridView的一个列,当数据仅仅有一行的时候这固然没有错,可是数据行数多了就会出现错误。
这是由于没有一个循环或者嵌套把每一行的数据都加入到DataGridView中。
解决方式:利用循环嵌套语句,把返回来的datatable表这个的数据分别赋值给DataGridView表。
<span style="font-size:14px;"> If dt.Rows.Count > 0 Then
'DataGridView.Rows(0).Cells("用户ID").Value = dt.Rows(1)("username")
'DataGridView.Rows(0).Cells("username").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</span>
当然,还有个非常easy的方法,就是直接绑定数据源:
DatagridView.DataSource=dt
凡是复杂的地方都会有简单的方法来解决
(2)为什么没点击一次combo的选项就会多出非常多空行?
基本问题是攻克了,可是当在点击一下combo中的管理员级别时,尽管查到的数据是正确的。可是出现了非常多空行。让人心里不是非常舒服。
这是由于每次查询之前没有把DataGridView中的行都清理掉,也就是一句代码而已:
<span style="font-size:14px;">DataGridView.Rows.Clear()</span>
(3)为什么每次都会显示最后一行为空行呢?
问题一个一个的解决,问题也在一个一个的被发现。
当大面积的空行去掉了,最后另一个小尾巴空行。以我的性格是必须把它去掉的。
这是由于DataGridView控件,使用的都是默认的属性,这最后的空行就是一个默认属性,那么如何去掉它呢?
解决方式:
<span style="font-size:14px;">DataGridView.AllowUserToAddRows = False </span>
去掉空行以后。当全部问题都解决后:
(4)DatagridView的其它操作
删除选中的行,那删除用户来说,既要删除DataGridView表的行同一时候要删除数据库中的数据。
选中DataGridView的多行然后操作
删除DataGridView的全部行,拿删除用户来说:
<span style="font-size:14px;">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</span>
(5)DataGridView的其他经常使用操作:
比如:取得当前单元格的行的索引,从0開始
(dataGridView1.CurrentCell.RowIndex).ToString()
行列的隐藏:
// DataGridView1的第一列隐藏
DataGridView1.Columns[0].Visible = false;
// DataGridView1的第一行隐藏
DataGridView1.Rows[0].Visible = false;
这仅仅是我的关于DataGridView眼下操作的理解,还有非常多对DataGridView的经常使用使用方法:
http://blog.sina.com.cn/s/blog_97b9841901011u0u.html
http://www.cnblogs.com/wintalen/archive/2010/12/13/1904536.html
小结:在机房收费系统重构的时候会常常使用到DataGridView控件。所以掌握好一个控件的用法非常重要,它相当于一个承载了我们须要可视给用户的一个篮子。将须要查询的数据显示在这个篮子上。让用户非常清晰的明了信息。而且非常方便的进行对数据的操作。
DataGridView ——管理员对用户的那点操作的更多相关文章
- oracle用户与表空间操作
oracle系统用户sys,system , sysman, scott 使用system用户登录[username/password][@server][as sysdba|sysoper]eg: ...
- Headroom.js – 快速响应用户的页面滚动操作
Headroom.js 是一个轻量级,高性能的JS插件(无依赖性!),允许你响应用户的滚动行为.Headroom.js 使您能够在适当的时候把元素融入视图,而其它时候让内容成为焦点.Headroom. ...
- 在Linux下记录所有用户的登录和操作日志
一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的. 在这里我们通 ...
- Maven-007-Nexus 用户添加,用户角色分配,用户修改密码,管理员重置用户密码
配置好 maven nexus 私服后,默认的用户可通过查看[Users]查看当前私服中所存在的用户,如下图所示:
- linux查看ssh用户登录日志与操作日志
linux查看ssh用户登录日志与操作日志 2013-11-01转载 ssh用户登录日志 linux下登录日志在下面的目录里: 代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...
- Shell脚本中实现切换用户并执行命令操作【转】
第一种方法 cat test.sh #!/bin/bashsu - test <<EOFpwd;exit;EOF 执行结果图: 第二种方法 当然也可以用下面的命令来执行 复制代码代码如下: ...
- Linux下记录所有用户的登录和操作日志
Linux下记录所有用户的登录和操作日志 一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的 ...
- MonGoDB 常见操作, 设置管理员和用户登入
[ 启动客户端 => ./bin/mongo --host 192.168.200.100 ] 1: 查看所有已经创建的数据库 => show dbs 2: 切换或者创建数据库 ...
- 4.windows和Linux下创建oracleusername表空间,表,插入数据,用户管理表等操作
进入超级管理员,运行下面命令 Window下创建数据库.表空间,用户,插入数据等操作 -- 01 创建表空间 -- 注意表空间的路径 依据实际安装环境进行调整 CREATE TABLESPACE ts ...
随机推荐
- iOS8 UITableView 分割条设置separator intent = 0 不起作用
转自:http://blog.csdn.net/ljb_wh/article/details/40788333 ios7的时候在storyboard 设置 TableView的separator in ...
- js词法作用域
作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ...
- redis(四)redis与Mybatis的无缝整合让MyBatis透明的管理缓存
redis的安装 http://liuyieyer.iteye.com/blog/2078093 redis的主从高可用 http://liuyieyer.iteye.com/blog/207809 ...
- 全球在一个 level 上思考的价值观和想法是一样的(转)
近日,福布斯中文版总编辑周建工对话马云,谈到腾讯频繁的大笔收购,马云点评称腾讯收购的所有的案子,老百性都看得懂,这就错了.战略就像买股票一样,如果老太太都开始买股票了,一定有问题. 以下是对话内容,转 ...
- MYSQ提高L查询效率的策略总结
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值推断,否则将导致引擎放弃使用索 ...
- Android AES加密算法及事实上现
昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...
- UVA 10340 (13.08.25)
Problem E All in All Input: standard input Output: standard output Time Limit: 2 seconds Memory Limi ...
- 一天一个类--ArrayList之二
继续我的小激动--- 1.看看构造一个ArrayList 有两种方式 一个指定大小,一个不指定.我们知道他其实使用数组来实现了,数组肯定要有大小,那么他没指定大小,默认的是多少呢???追踪源码---开 ...
- 分享非常有用的Java程序 (关键代码) (一)
原文:分享非常有用的Java程序 (关键代码) (一) 分享一些非常有用的Java程序 (关键代码) ,希望对你有所帮助. 1. 得到当前方法的名字 String methodName = Th ...
- 香蕉派 BPI-M1+ 双核开源硬件单板计算机
香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...