• 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#

Điều hành viên: tungblt, vuathongtin

mrsiro
Bài viết: 6
Ngày tham gia: T.Ba 30/09/2014 10:01 am

Gridcontrol devexpree

Gửi bàigửi bởi mrsiro » T.Ba 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ổ
Bài viết: 53
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 time

Re: Gridcontrol devexpree

Gửi bàigửi bởi ncxn » T.Hai 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
  1. Imports System.ComponentModel
  2. Imports DevExpress.Utils
  3. Imports DevExpress.XtraGrid.Views.Grid
  4.  
  5. Public Class Class1
  6.     'Inherits Component
  7.     Private _AppearanceDisabledRow As AppearanceObject
  8.  
  9.     <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
  10.     Public ReadOnly Property AppearanceDisabledRow As AppearanceObject
  11.         Get
  12.             Return _AppearanceDisabledRow
  13.         End Get
  14.     End Property
  15.  
  16.     Private _GridView As GridView
  17.  
  18.     Public Property GridView As GridView
  19.         Get
  20.             Return _GridView
  21.         End Get
  22.         Set(ByVal value As GridView)
  23.             UnSubscribeEvents(_GridView)
  24.             _GridView = value
  25.             SubscribeEvents(value)
  26.         End Set
  27.     End Property
  28.  
  29.     Private _DisabledRows As List(Of Integer)
  30.  
  31.     <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
  32.     Public ReadOnly Property DisabledRows As List(Of Integer)
  33.         Get
  34.             Return _DisabledRows
  35.         End Get
  36.     End Property
  37.  
  38.     Public Sub New()
  39.         _DisabledRows = New List(Of Integer)()
  40.         _AppearanceDisabledRow = New AppearanceObject()
  41.         AddHandler AppearanceDisabledRow.Changed, AddressOf _AppearanceDisabledRow_Changed
  42.     End Sub
  43.  
  44.     Private Sub _AppearanceDisabledRow_Changed(ByVal sender As Object, ByVal e As EventArgs)
  45.         If GridView Is Nothing Then Return
  46.  
  47.         For i As Integer = 0 To DisabledRows.Count - 1
  48.             GridView.RefreshRow(GridView.GetRowHandle(DisabledRows(i)))
  49.         Next
  50.     End Sub
  51.  
  52.     Private Sub UnSubscribeEvents(ByVal view As GridView)
  53.         If view IsNot Nothing Then
  54.             RemoveHandler view.RowCellStyle, AddressOf view_RowCellStyle
  55.             RemoveHandler view.ShowingEditor, AddressOf view_ShowingEditor
  56.         End If
  57.     End Sub
  58.  
  59.     Private Sub SubscribeEvents(ByVal view As GridView)
  60.         If view IsNot Nothing Then
  61.             AddHandler view.RowCellStyle, AddressOf view_RowCellStyle
  62.             AddHandler view.ShowingEditor, AddressOf view_ShowingEditor
  63.         End If
  64.     End Sub
  65.  
  66.     Public Sub DisableRow(ByVal dataSourceRowIndex As Integer)
  67.         DisabledRows.Add(dataSourceRowIndex)
  68.     End Sub
  69.  
  70.     Public Function IsRowDisabled(ByVal dataSourceRowIndex As Integer) As Boolean
  71.         Return DisabledRows.Contains(dataSourceRowIndex)
  72.     End Function
  73.  
  74.     Public Sub EnableRow(ByVal dataSourceRowIndex As Integer)
  75.         While IsRowDisabled(dataSourceRowIndex)
  76.             DisabledRows.Remove(dataSourceRowIndex)
  77.         End While
  78.     End Sub
  79.  
  80.     Private Sub view_ShowingEditor(ByVal sender As Object, ByVal e As CancelEventArgs)
  81.         e.Cancel = IsRowDisabled(GridView.GetDataSourceRowIndex(GridView.FocusedRowHandle))
  82.     End Sub
  83.  
  84.     Private Sub view_RowCellStyle(ByVal sender As Object, ByVal e As RowCellStyleEventArgs)
  85.         Console.WriteLine(DateTime.Now.Millisecond)
  86.         If IsRowDisabled(GridView.GetDataSourceRowIndex(e.RowHandle)) Then e.Appearance.Assign(AppearanceDisabledRow)
  87.     End Sub
  88. End Class
  89.  

2. Sử dụng

  1. Dim rows_helper As New Class1
  2.         rows_helper.GridView = Me.GridView1 ' add grid properties
  3.         rows_helper.DisableRow(1) ' disabled rowindex 1
  4.         GridView1.RefreshRow(GridView1.GetRowHandle(1))' refresh d
Sửa lần cuối bởi ncxn vào ngày T.Hai 08/04/2019 1:18 pm với 1 lần sửa.

mrsiro
Bài viết: 6
Ngày tham gia: T.Ba 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Gửi bàigửi bởi mrsiro » T.Hai 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:

Mã: Chọn hết

 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ổ
Bài viết: 53
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 time

Re: Gridcontrol devexpree

Gửi bàigửi bởi ncxn » T.Năm 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
Bài viết: 6
Ngày tham gia: T.Ba 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Gửi bàigửi bởi mrsiro » T.Năm 11/04/2019 6:15 pm

Hình ảnh
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ú
Bài viết: 528
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 185 time
Been thanked: 32 time
Liên hệ:

Re: Gridcontrol devexpree

Gửi bàigửi bởi muaphonui_2010 » T.Bảy 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
Hình ảnh
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
Bài viết: 6
Ngày tham gia: T.Ba 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Gửi bàigửi bởi mrsiro » T.Bảy 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ú
Bài viết: 528
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 185 time
Been thanked: 32 time
Liên hệ:

Re: Gridcontrol devexpree

Gửi bàigửi bởi muaphonui_2010 » T.Hai 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
Bài viết: 6
Ngày tham gia: T.Ba 30/09/2014 10:01 am

Re: Gridcontrol devexpree

Gửi bàigửi bởi mrsiro » T.Hai 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ế.


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.6 khách