DataGridView ——管理員對使用者的那點操作

來源:互聯網
上載者:User

標籤:datagridview   style   class   blog   code   http   

         記得第一次做機房收費系統的時候,就在添加刪除使用者這出現了點小問題,因為一直都是一個容不得一點瑕疵的人,所以對查詢使用者的時候查詢一次就會多一些空行我很是不能容忍,看似很小的問題,我卻花了很長的時間。現在機房收費系統重構了,又在這塊吹毛求疵了,用了整整兩個小時的時間。解決了好多好多小問題。

(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)("使用者名稱")            'DataGridView.Rows(0).Cells("使用者名稱").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)("使用者名稱")            '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</span>


(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控制項,所以掌握好一個控制項的使用方法很重要,它相當於一個承載了我們需要可視給使用者的一個籃子,將需要查詢的資料顯示在這個籃子上,讓使用者很清晰的明了資訊,並且很方便的進行對資料的操作。

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.