728x90
반응형
728x170
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Menu;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
...
private GridControl gridControl;
private GridView gridView;
...
this.gridControl.MouseDown += gridControl_MouseDown;
...
this.gridView.CustomDrawRowIndicator += gridView_CustomDrawRowIndicator;
...
#region 그리드 컨트롤 마우스 DOWN 처리하기 - gridControl_MouseDown(sender, e)
/// <summary>
/// 그리드 컨트롤 마우스 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridControl_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
ShowMenu(this.gridView, e.X, e.Y);
}
}
#endregion
#region 그리드 뷰 행 지시자 커스텀 그리기 - gridView_CustomDrawRowIndicator(sender, e)
/// <summary>
/// 그리드 뷰 행 지시자 커스텀 그리기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
if(e.RowHandle == GridControl.InvalidRowHandle)
{
e.Handled = true;
e.Painter.DrawObject(e.Info);
Rectangle rectangle = e.Bounds;
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, 255, 0, 0)), rectangle);
rectangle.Height--;
rectangle.Width--;
e.Graphics.DrawRectangle(Pens.Red, rectangle);
}
}
#endregion
#region 메뉴 보여주기 - ShowMenu(gridView, x, y)
/// <summary>
/// 메뉴 보여주기
/// </summary>
/// <param name="gridView">그리드 뷰</param>
/// <param name="x">X 좌표</param>
/// <param name="y">Y 좌표</param>
public void ShowMenu(GridView gridView, int x, int y)
{
GridHitInfo gridHitInfo = gridView.CalcHitInfo(new Point(x, y));
GridViewMenu gridViewMenu = null;
if(gridHitInfo.HitTest == GridHitTest.ColumnButton)
{
gridViewMenu = new TestGridViewMenu(this.gridView);
gridViewMenu.Init(gridHitInfo);
gridViewMenu.Show(gridHitInfo.HitPoint);
}
}
#endregion
▶ TestGridViewMenu.cs
using System;
using DevExpress.Utils.Menu;
using DevExpress.XtraGrid.Menu;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
/// <summary>
/// 테스트 그리드 뷰 메뉴
/// </summary>
public class TestGridViewMenu : GridViewMenu
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - TestGridViewMenu(gridView)
/// <summary>
/// 생성자
/// </summary>
/// <param name="gridView">그리드 뷰</param>
public TestGridViewMenu(GridView gridView) : base(gridView)
{
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 항목들 생성하기 - CreateItems()
/// <summary>
/// 항목들 생성하기
/// </summary>
protected override void CreateItems()
{
Items.Clear();
DXSubMenuItem menuItem = new DXSubMenuItem("컬럼들");
Items.Add(menuItem);
Items.Add(CreateMenuItem("런타임 컬럼 커스텀 설정", GridMenuImages.Column.Images[3], "커스텀 설정", true));
foreach(GridColumn gridColumn in View.Columns)
{
if(gridColumn.OptionsColumn.ShowInCustomizationForm)
{
menuItem.Items.Add
(
CreateMenuCheckItem
(
gridColumn.GetTextCaption(),
gridColumn.VisibleIndex >= 0,
null,
gridColumn,
true
)
);
}
}
}
#endregion
#region 메뉴 항목 클릭시 처리하기 - OnMenuItemClick(sender, e)
/// <summary>
/// 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
protected override void OnMenuItemClick(object sender, EventArgs e)
{
if(RaiseClickEvent(sender, null))
{
return;
}
DXMenuItem menuItem = sender as DXMenuItem;
if(menuItem.Tag == null)
{
return;
}
if(menuItem.Tag is GridColumn)
{
GridColumn gridColumn = menuItem.Tag as GridColumn;
gridColumn.VisibleIndex = gridColumn.VisibleIndex >= 0 ? -1 : View.VisibleColumns.Count;
}
else if(menuItem.Tag.ToString() == "커스텀 설정")
{
View.ColumnsCustomization();
}
}
#endregion
}
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요