• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Gridcontrol devexpree

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

mrsiro
Posts: 6
Joined: Tue 30/09/2014 10:01 am

Gridcontrol devexpree

Postby mrsiro » Tue 02/04/2019 8:00 pm

Chào các bạn, mình có sử dụng gridcontrol của devexpress và thiết kế thêm các textbox trên form được bindding đến datasource của grid.
Mình có thêm các button: Thêm, sửa, lưu, bỏ qua. Khi mình click vào nút sửa mình có code gridcontrol.enable = false, mục đích là lock grid lại không cho user click vào record khác khi đang chỉnh sửa. Nhưng nếu set enable = false thì các gird nó bị mờ luôn. Vậy giờ làm cách nào để grid vẫn bình thường chỉ yêu cầu là khi click nút sửa thì lock hoàn toàn grid không thể click vào record khác, không thể kéo scrollbar, cũng không cho phép di chuyển bằng navigator bar.



ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 56
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 times

Re: Gridcontrol devexpree

Postby ncxn » Mon 08/04/2019 12:25 pm

Đây là hướng dẫn trên trang chủ của nó
Đơn giản là như vầy:

  1. Private Sub gridView1_ShowingEditor(ByVal sender As Object, ByVal e As CancelEventArgs)
  2.             If Convert.ToBoolean(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns("IsPosted"))) Then
  3.                 e.Cancel = True
  4.             End If
  5.         End Sub

-------
Còn phức tạp là như này:

1. add class
[vbnet]Imports System.ComponentModel
Imports DevExpress.Utils
Imports DevExpress.XtraGrid.Views.Grid

Public Class Class1
'Inherits Component
Private _AppearanceDisabledRow As AppearanceObject

<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public ReadOnly Property AppearanceDisabledRow As AppearanceObject
Get
Return _AppearanceDisabledRow
End Get
End Property

Private _GridView As GridView

Public Property GridView As GridView
Get
Return _GridView
End Get
Set(ByVal value As GridView)
UnSubscribeEvents(_GridView)
_GridView = value
SubscribeEvents(value)
End Set
End Property

Private _DisabledRows As List(Of Integer)

<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public ReadOnly Property DisabledRows As List(Of Integer)
Get
Return _DisabledRows
End Get
End Property

Public Sub New()
_DisabledRows = New List(Of Integer)()
_AppearanceDisabledRow = New AppearanceObject()
AddHandler AppearanceDisabledRow.Changed, AddressOf _AppearanceDisabledRow_Changed
End Sub

Private Sub _AppearanceDisabledRow_Changed(ByVal sender As Object, ByVal e As EventArgs)
If GridView Is Nothing Then Return

For i As Integer = 0 To DisabledRows.Count - 1
GridView.RefreshRow(GridView.GetRowHandle(DisabledRows(i)))
Next
End Sub

Private Sub UnSubscribeEvents(ByVal view As GridView)
If view IsNot Nothing Then
RemoveHandler view.RowCellStyle, AddressOf view_RowCellStyle
RemoveHandler view.ShowingEditor, AddressOf view_ShowingEditor
End If
End Sub

Private Sub SubscribeEvents(ByVal view As GridView)
If view IsNot Nothing Then
AddHandler view.RowCellStyle, AddressOf view_RowCellStyle
AddHandler view.ShowingEditor, AddressOf view_ShowingEditor
End If
End Sub

Public Sub DisableRow(ByVal dataSourceRowIndex As Integer)
DisabledRows.Add(dataSourceRowIndex)
End Sub

Public Function IsRowDisabled(ByVal dataSourceRowIndex As Integer) As Boolean
Return DisabledRows.Contains(dataSourceRowIndex)
End Function

Public Sub EnableRow(ByVal dataSourceRowIndex As Integer)
While IsRowDisabled(dataSourceRowIndex)
DisabledRows.Remove(dataSourceRowIndex)
End While
End Sub

Private Sub view_ShowingEditor(ByVal sender As Object, ByVal e As CancelEventArgs)
e.Cancel = IsRowDisabled(GridView.GetDataSourceRowIndex(GridView.FocusedRowHandle))
End Sub

Private Sub view_RowCellStyle(ByVal sender As Object, ByVal e As RowCellStyleEventArgs)
Console.WriteLine(DateTime.Now.Millisecond)
If IsRowDisabled(GridView.GetDataSourceRowIndex(e.RowHandle)) Then e.Appearance.Assign(AppearanceDisabledRow)
End Sub
End Class
[/vbnet]
2. Sử dụng

[vbnet]Dim rows_helper As New Class1
rows_helper.GridView = Me.GridView1 ' add grid properties
rows_helper.DisableRow(1) ' disabled rowindex 1
GridView1.RefreshRow(GridView1.GetRowHandle(1))' refresh d[/vbnet]
Last edited by ncxn on Mon 08/04/2019 1:18 pm, edited 1 time in total.

mrsiro
Posts: 6
Joined: Tue 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Postby mrsiro » Mon 08/04/2019 7:26 pm

Chào bạn, mình không có chỉnh sửa trực tiếp trên grid. Nó là như thế này mình có 1grid hiển thị danh sách có các column: ID, name, gender.
Mình có 3 textbox bindding với 3 column của grid. Mình có thêm nút lưu, sửa, bỏ qua.
Khi mình click vào 1 record ở grid thì lúc này 3txtbox nhận dữ liệu. Khi mình ấn nút sửa mình muốn người dùng không thể focus đến record khác nữa, củng ko thể lăn chuột hoặc di chuyển bằng navigator bar. Mình có code 3 sự kiện keydown, mousedown và mousewheel của grid nhu sau:

Code: Select all

 Private Sub grvDsnv_KeyDown(sender As Object, e As KeyEventArgs) Handles grvDsnv.KeyDown
        If checkchinhsua = True Then
            e.Handled = True
        Else
            e.Handled = False
        End If
    End Sub

    Private Sub grvDsnv_MouseDown(sender As Object, e As MouseEventArgs) Handles grvDsnv.MouseDown
            If checkchinhsua = True Then
                TryCast(e, DevExpress.Utils.DXMouseEventArgs).Handled = True
            Else
                TryCast(e, DevExpress.Utils.DXMouseEventArgs).Handled = False
            End If
    End Sub

    Private Sub grvDsnv_MouseWheel(sender As Object, e As MouseEventArgs) Handles grvDsnv.MouseWheel
        If checkchinhsua = True Then
            CType(e, DevExpress.Utils.DXMouseEventArgs).Handled = True
        Else
            CType(e, DevExpress.Utils.DXMouseEventArgs).Handled = False
        End If
    End Sub

Với biến checkchinhsua là biến toàn cục của form. Tại sự kiện btnSua click mình set biến này = true. Vậy là khi ấn nút sửa thì user không thể di chuyển được nữa. Code chạy tốt, có điều có 1 vấn đề là mặc dù user không thể lăn chuột nhưng vẫn có thể di chuyển grid bằng cách click chuột vào thanh vertical bar hoặc horizonal bar. Bạn có thể giúp mình code lock thêm 2 thanh scroll bar này nữa là ok. Mình có tìm ra hướng dẫn trên trang devexpress là sử dụng thuộc tính vertscrollvisibility, nhưng nếu sử dụng thuộc tính này thì scrollbar bị hide đi. Còn mình muốn là lock chứ không phải hide đi.

ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 56
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 times

Re: Gridcontrol devexpree

Postby ncxn » Thu 11/04/2019 9:12 am

Hì hì thực ra mình hổng hiểu lắm mục đích làm vậy để làm gì, cho đẹp à?

mrsiro
Posts: 6
Joined: Tue 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Postby mrsiro » Thu 11/04/2019 6:15 pm

Image
bạn xem hình sau sẽ rõ mục đích của mình.

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 532
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 186 times
Been thanked: 32 times
Contact:

Re: Gridcontrol devexpree

Postby muaphonui_2010 » Sat 13/04/2019 3:07 pm

Cái cảu bạn cần nó ko phải thuộc tính enable mà bạn phải dùng thuộc tính Readonly.
như hình
Image
Tương tự mỗi cột của nó cũng có thuộc tính Readonly để bạn khóa 1 cột nào đó nếu bạn muốn.
nếu ko đúng ý bạn, bạn nói lại cho mình hiểu mình chỉ cho.

mrsiro
Posts: 6
Joined: Tue 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Postby mrsiro » Sat 13/04/2019 7:24 pm

ko đúng ý rồi bạn ơi, mình đã set readonly cho grid rồi, user chỉ có thể sửa trong 3 textbox ở dưới rồi ấn nút lưu mới được lưu vô grid. Ý mình muốn là khi ấn nút sửa thì lock grid lại không cho di chuyển bằng scrollbar luôn, lock ngay vị trí đó luôn không cho người dùng di chuyển bằng scrollbar nữa. Khi nào ấn lưu thì mới tiến hành unlock.

muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 532
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 186 times
Been thanked: 32 times
Contact:

Re: Gridcontrol devexpree

Postby muaphonui_2010 » Mon 15/04/2019 9:05 am

Bạn thử đoạn code này thử được không nhé


Tắt thanh Navigator
Gridcontrol.UseEmbeddedNavigator = False
tắt thanh trược
gridview.VertScrollVisibility = ScrollVisibility.Never
khóa không cho di chuyển
gridview.OptionsView.ShowIndicator = False
gridview.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.None
gridview.OptionsSelection.EnableAppearanceFocusedCell = False
gridview.OptionsSelection.EnableAppearanceFocusedRow = False
gridview.OptionsSelection.EnableAppearanceHideSelection = False

Nếu bạn muốn người dùng không được đặt con trỏ vào ô thì bạn đặt tất cả các cột thêm thuộc tính này
tencot.OptionsColumn.AllowEdit = False
tencot.OptionsColumn.AllowFocus = False
tencot.OptionsColumn.ReadOnly = True
tencot.OptionsColumn.TabStop = False

mrsiro
Posts: 6
Joined: Tue 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Postby mrsiro » Mon 15/04/2019 10:13 am

thuộc tính gridview.VertScrollVisibility = ScrollVisibility.Never thì mình biết rồi nhưng nó hide cái scrollbar luôn chứ không phải lock, ý mính là vẫn hiển thị scrollbar nhưng lock nó lại đó. Mình tìm mãi mà không có thuộc tính enabled hay lock đế set false cho nó, có mỗi cái VertScrollVisibility mà cái này là hide rồi chứ không phải lock nữa.
Một vài phần mềm mình dùng qua họ làm được điều này, khi ấn nút sửa là cái thanh scrolbar nó mờ đi như kiểu set enabled = false ấy. Không biết họ dùng kiểu gì mà làm được như thế.


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 2 guests