- [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
- [SOFTWARE] Giới thiệu bộ phần mềm tính Kết Cấu Thép HatteSale, Mộng Đơn, Dầm, Sàn, Móng Cọc, Vách, Xà Gồ, Tính Tải Trọng
- [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
- Hướng dẫn khóa file bằng nhiều process id, không cho xóa tập tin
- Hướng dẫn cách tạo Product Id cho ứng dụng phần mềm XXXXX-XXXXX-XXXXX-XXXXX
- [SQLSERVER] Hướng dẫn tạo script sql từ ứng dụng Sqlserver management Studio
- [C#] Hướng dẫn sử dụng thư viện AutoITx lấy id và password Ultraviewer trên winform
- [VB.NET] Hướng dẫn lấy thông tin tài khoản đăng nhập windows và khởi động lại ứng dụng ở chế độ Administrator
- [C#] Sử dụng thư viện Polly gửi lại request api khi request bị lỗi hay rớt mạng
- [DEVEXPRESS] Chia sẻ source code tạo báo cáo report in tem nhãn label trên C# winform
- [DEVEXPRESS] Hướng dẫn vẽ biểu đồ Bar Chart trên Winform
- [C#] Tạo form đăng nhập và đăng ký với hiệu ứng Sliding Animation Effect
- [C#] Hướng dẫn tạo thanh toán đơn hàng qua mã vạch VietQR sử dụng API PayOS hoàn toàn miễn phí
- [C#] Hướng dẫn ghi log ra RichTextBox giống Console trên Winform sử dụng thư viện Serilog
- [C#] Hướng dẫn cách tạo mã QR Code trên file Excel
- [VB.NET] Gởi tin nhắn và file đính kèm qua ứng dụng gởi tin nhắn Whats App
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é !