博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataGridView ——管理员对用户的那点操作
阅读量:5033 次
发布时间:2019-06-12

本文共 4219 字,大约阅读时间需要 14 分钟。

         记得第一次做机房收费系统的时候,就在加入删除用户这出现了点小问题,由于一直都是一个容不得一点瑕疵的人。所以对查询用户的时候查询一次就会多一些空行我非常是不能容忍。看似非常小的问题,我却花了非常长的时间。如今机房收费系统重构了。又在这块吹毛求疵了,用了整整两个小时的时间。

攻克了好多好多小问题。

1)为什么总是显示第一行数据?

        用了SqlHelper查询到某一级别的用户返回给U层。就是传统的三层查询思想。当时查询出来后有一点小小的窃喜。可是当加入用户加入的多了,利用DataGridView怎么都是仅仅显示第一行数据。

        看看我原来的代码:

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
    这两当dt.Rows.Count > 0 之后说明查询到用户记录,可是无论查到多少条记录。当datatable返回一个查到的用户表给U层之后,接下来的代码就是显示的第一行的记录。所以就是在这里犯了错误。

看到有些人的博客就是这样写的。可能是由于一開始加入的记录都比較少吧。

    每次DataTable返回来的数据都是查询到的一个表,而仅仅是把DataTable的第一行的某个自己主动赋给前面DataGridView的一个列,当数据仅仅有一行的时候这固然没有错,可是数据行数多了就会出现错误。

这是由于没有一个循环或者嵌套把每一行的数据都加入到DataGridView中。

    

  解决方式:利用循环嵌套语句,把返回来的datatable表这个的数据分别赋值给DataGridView表。

       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

    当然,还有个非常easy的方法,就是直接绑定数据源:      

DatagridView.DataSource=dt
    凡是复杂的地方都会有简单的方法来解决

2)为什么没点击一次combo的选项就会多出非常多空行?

     基本问题是攻克了,可是当在点击一下combo中的管理员级别时,尽管查到的数据是正确的。可是出现了非常多空行。让人心里不是非常舒服。

     

        这是由于每次查询之前没有把DataGridView中的行都清理掉,也就是一句代码而已:

DataGridView.Rows.Clear()

3)为什么每次都会显示最后一行为空行呢?

     问题一个一个的解决,问题也在一个一个的被发现。

当大面积的空行去掉了,最后另一个小尾巴空行。以我的性格是必须把它去掉的。

     

        这是由于DataGridView控件,使用的都是默认的属性,这最后的空行就是一个默认属性,那么如何去掉它呢?

解决方式:

DataGridView.AllowUserToAddRows = False  
 
  去掉空行以后。当全部问题都解决后:

    

 

  (4)DatagridView的其它操作

      删除选中的行,那删除用户来说,既要删除DataGridView表的行同一时候要删除数据库中的数据。

选中DataGridView的多行然后操作

     删除DataGridView的全部行,拿删除用户来说:

    

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

     (5)DataGridView的其他经常使用操作:

     比如:取得当前单元格的行的索引,从0開始

(dataGridView1.CurrentCell.RowIndex).ToString()
           行列的隐藏:

// DataGridView1的第一列隐藏DataGridView1.Columns[0].Visible = false;// DataGridView1的第一行隐藏DataGridView1.Rows[0].Visible = false;
     这仅仅是我的关于DataGridView眼下操作的理解,还有非常多对DataGridView的经常使用使用方法:

           

           

 

      小结:在机房收费系统重构的时候会常常使用到DataGridView控件。所以掌握好一个控件的用法非常重要,它相当于一个承载了我们须要可视给用户的一个篮子。将须要查询的数据显示在这个篮子上。让用户非常清晰的明了信息。而且非常方便的进行对数据的操作。

转载于:https://www.cnblogs.com/mengfanrong/p/5184677.html

你可能感兴趣的文章
CSplitterWnd类
查看>>
idea主要设置大纲图
查看>>
Codeforces Round #167 (Div. 1 + Div. 2)
查看>>
Oracle 关闭正在执行的job
查看>>
Istio调用链埋点原理剖析—是否真的“零修改”分享实录(下)
查看>>
Question 关于js正则的问题,why????????????????
查看>>
day04 python_selenium
查看>>
关于 hover 时候闪烁的问题
查看>>
加密学教程(Cryptography Tuturials)文件夹
查看>>
90后大学生卖煎饼月收入4k
查看>>
MongoDB的查询索引
查看>>
u-boot简单学习笔记(二)——AR9331 uboot.lds分析
查看>>
文件操作:根据现有类生成所需要的类
查看>>
pdf中内嵌字体问题
查看>>
Debian搭建WordPress
查看>>
Xstream 解析xml文件内容
查看>>
JavaScript正则表达式方法总结
查看>>
pub/sub的实际应用总结
查看>>
多媒体标签
查看>>
TCP的应用编程服务器端重要笔记
查看>>