- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
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
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:
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:
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.
Chúc các bạn thành công !
Nhớ Like và Share nhé !