NEWS

Add new row in GridControl DevExpress - Thêm dòng mới vào lưới khi nhấn tab cuối dòng trong GridControl DevExpress

Add new row in GridControl DevExpress - Thêm dòng mới vào lưới khi nhấn tab cuối dòng trong GridControl DevExpress
Đăng bởi: TONA Cody - Lượt xem: 26190 22:04:51, 03/01/2017C#   In bài viết

Hôm nay mình xin hướng dẫn làm một thủ thuật nhỏ để tạo ra new row trong GridControl hỗ trợ tốc độ nhập liệu trực tiếp trên lưới. Như tiêu đề đã nêu, mặc định gridcontrol không cho phép nhập liệu dòng mới trên lưới nếu chúng ta không thao tác nhấn vào nút '+' trong khung của lưới, và bài viết này sẽ hướng dẫn các bạn làm thế nào để có thể nhập tiếp dòng mới khi nhấn tab hoặc enter ở cuối dòng.

Bài này mình sẽ lấy gridcontrol của bài trước để dùng, các bạn có thể tham khảo bài trước tại đây https://laptrinhvb.net/bai-viet/devexpress/Change-value-on-another-combobox-column-in-gridcontrol-devexpress---Thay-doi-gia-tri-cua-combobox-tren-gridcontrol-su-dung-LookupEdit/ff2a16c24507a5e9.html

Mình sẽ có một form như sau:
devexpress-gridcontrol-add-new-row-tu-dong-them-dong-moi-tren-luoi-1
 

Mình sẽ tạo ra một class chứa những dòng lệnh này, mọi form chứa gridcontrol đều có thể dùng chung, mình chỉ cần import vào là nó tự động chạy. Thực hiện thêm class:


devexpress-gridcontrol-add-new-row-tu-dong-them-dong-moi-tren-luoi-2

Mình đặt tên class là GridNewRowHelper. Sau đó copy toàn bộ những thủ tục này, paste vào thân của class:

Private ReadOnly _View As GridView
    Public Sub New(ByVal view As GridView)
        _View = view
        AddHandler view.GridControl.EditorKeyDown, AddressOf GridControl_EditorKeyDown
        AddHandler view.GridControl.KeyDown, AddressOf GridControl_KeyDown
    End Sub

    Private Sub GridControl_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        e.Handled = OnKeyDown(e.KeyCode, e.Modifiers)
    End Sub

    Private Sub GridControl_EditorKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        e.Handled = OnKeyDown(e.KeyCode, e.Modifiers)
    End Sub
    Private Function OnKeyDown(ByVal keyCode As Keys, ByVal modifiers As Keys) As Boolean
        If modifiers = Keys.None And (keyCode = Keys.Enter OrElse keyCode = Keys.Tab) Then
            Return CheckAddNewRow()
        End If
        Return False
    End Function

    Private Function CheckAddNewRow() As Boolean
        If _View.FocusedColumn.VisibleIndex = _View.VisibleColumns.Count - 1 Then
            If _View.IsNewItemRow(_View.FocusedRowHandle) Then
                _View.UpdateCurrentRow()
            End If
            If _View.IsLastRow Then
                Return AddNewRow()
            End If
        End If
        Return False
    End Function

    Private Function AddNewRow() As Boolean
        _View.AddNewRow()
        _View.FocusedColumn = _View.VisibleColumns(0)
        Return True
    End Function

Nhớ import thư viện Grid của DevExpress vào:
 

Imports DevExpress.XtraGrid.Views.Grid

Như vậy là hoàn tất, quay lại form đầu, thực hiện import class mới tạo vào:

Imports GridControl_focusRow.GridNewRowHelper

Với GridControl_focusRow là tên solution của mình và GridNewRowHelper chính là tên class đã đặt. Sau khi đã import được thư viện thành công, bây giờ có thể gọi hàm trong class ra và sử dụng như một thư viện của VB.Net. Bỏ câu lệnh này vào trong thủ tục New của form:

    Public Sub New()
        InitializeComponent()
        Dim TempGridNewRowHelper As GridNewRowHelper = New GridNewRowHelper(AdvBandedGridView1)
    End Sub

Nhấn F5 thôi, quá đơn giản phải không. Và để lưu được những dòng mới này, các bạn có thể lưu trực tiếp trên lưới khi focus qua dòng khác ví dụ như nhấn tab hoặc enter ở cuối dòng. Hoặc bạn có thể nhập hết toàn bộ thông tin, sau đó tạo ra một button và thực thi câu lệnh truy vấn tới database với thủ tục như sau:

Public Sub LuuGrid()
       dim dr as datarow 'tạo một datarow chứa
       For I as integer = 0 to AdvBandedGridView1.Rowcount-1 'Sử dung vòng for quét toàn bộ số dòng trong lưới
              dr=AdvBandedGridView1.Getdatarow(i) 'gán dữ liệu và thuộc tính của dòng được quét vào datarow vừa tạo
              if dr.rowState=Rowstate.AddNew then 'kiểm tra nếu là dòng mới nhập vào thì thực hiện câu lệnh dưới
                        'Thực hiện câu truy vấn insert tại đây
                        'Các giá trị của ô trên lưới sẽ được lấy bằng cách dr("FieldName") với FieldName chính là tên trường của cột dữ liệu của lưới ví dụ: dr("manv")
              End if
       Next
End Sub

Và gọi LuuGrid() trong sự kiện button Lưu.Click. Hoặc bạn có thể Search trên LaptrinhVB.Net từ khóa Update, có rất nhiều cách để các bạn có thể lưu thông tin trên lưới.
devexpress-gridcontrol-add-new-row-them-dong-moi-tren-luoi
Chúc các bạn thành công !
Nhớ Like và Share nhé !

Tags: gridview

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

Add new row in GridControl DevExpress - Thêm dòng mới vào lưới khi nhấn tab cuối dòng trong GridControl DevExpress
Đăng bởi: TONA Cody - Lượt xem: 26190 22:04:51, 03/01/2017C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.