본문 바로가기

C#

[DevExpress] Hot-Tracking 코드로 직접 구현하기

728x90

Grid 옵션으로 직접 코딩하지 않고 설정할 수 있지만 Grid의 Cell을 Merge하는 작업을 해서인지 옵션이 적용되지 않았다. 그래서 직접 구현하는 방법을 찾아보았다.

private int hotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;  
private int HotTrackRow {  
    get {  
        return hotTrackRow;  
    }  
    set {  
        if (hotTrackRow != value) {  
            int prevHotTrackRow = hotTrackRow;  
            hotTrackRow = value;  
            gridView1.RefreshRow(prevHotTrackRow);  
            gridView1.RefreshRow(hotTrackRow);  

            if (hotTrackRow >= 0)  
                gridControl1.Cursor = Cursors.Hand;  
            else  
                gridControl1.Cursor = Cursors.Default;  
        }  
    }  
}  

private void gridView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {  
    GridView view = sender as GridView;  
    GridHitInfo info = view.CalcHitInfo(new Point(e.X, e.Y));  

    if (info.InRowCell)  
        HotTrackRow = info.RowHandle;  
    else  
        HotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;  
}  

private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) {  
    if (e.RowHandle == HotTrackRow)  
        e.Appearance.BackColor = Color.PaleGoldenrod;  
}

// 커서가 행 위에 있지 않을 때 HotTrack 제거하는 메서드
private void gridView1_MouseLeave(object sender, EventArgs e)
{
    HotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;
}

[출처]
https://supportcenter.devexpress.com/ticket/details/a998/how-to-implement-hot-tracking-for-grid-rows
https://supportcenter.devexpress.com/ticket/details/q372810/how-to-implement-the-hot-track-functionality-for-grid-rows-and-remove-hot-tracking-when

728x90