Page 1 of 1

Gridcontrol devexpree

Posted: Tue 02/04/2019 8:00 pm
by mrsiro
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.

Re: Gridcontrol devexpree

Posted: Mon 08/04/2019 12:25 pm
by ncxn
Đâ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]

Re: Gridcontrol devexpree

Posted: Mon 08/04/2019 7:26 pm
by mrsiro
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.

Re: Gridcontrol devexpree

Posted: Thu 11/04/2019 9:12 am
by ncxn
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 à?

Re: Gridcontrol devexpree

Posted: Thu 11/04/2019 6:15 pm
by mrsiro
Image
bạn xem hình sau sẽ rõ mục đích của mình.

Re: Gridcontrol devexpree

Posted: Sat 13/04/2019 3:07 pm
by muaphonui_2010
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.

Re: Gridcontrol devexpree

Posted: Sat 13/04/2019 7:24 pm
by mrsiro
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.

Re: Gridcontrol devexpree

Posted: Mon 15/04/2019 9:05 am
by muaphonui_2010
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

Re: Gridcontrol devexpree

Posted: Mon 15/04/2019 10:13 am
by mrsiro
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ế.