using System.ComponentModel;
using System.Windows.Forms;
using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : XtraForm
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 저장소 항목 버튼 에디터
/// </summary>
private RepositoryItemButtonEdit repositoryItemButtonEdit;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.gridView.InitializeView
(
true, // Multi Select
GridMultiSelectMode.CellSelect, // Grid Multi Select Mode
DrawFocusRectStyle.CellFocus, // Draw Focus Rect Style
true, // Show Indicator
true, // Show Column Headers
true, // Allow Column Moving
true, // Allow Column Resizing
true, // Allow Filter
true, // Allow Sort
false, // Allow Cell Merge
EditorShowMode.Default, // Editor Show Mode
true // Editable
);
this.gridView.OptionsBehavior.AutoPopulateColumns = true;
this.gridView.OptionsBehavior.EditingMode = GridEditingMode.EditFormInplace;
this.gridView.OptionsEditForm.ShowOnDoubleClick = DefaultBoolean.False;
this.gridView.OptionsEditForm.ShowOnEnterKey = DefaultBoolean.False;
this.gridView.OptionsEditForm.ShowOnF2Key = DefaultBoolean.False;
this.gridControl.DataSource = new nwindDataSetTableAdapters.ProductsTableAdapter().GetData();
this.gridView.BestFitColumns();
#region 저장소 항목 버튼 에디터를 설정한다.
this.repositoryItemButtonEdit = new RepositoryItemButtonEdit
{
Name = "repositoryItemButtonEdit",
AutoHeight = false,
TextEditStyle = TextEditStyles.HideTextEditor
};
this.repositoryItemButtonEdit.Buttons.Clear();
this.repositoryItemButtonEdit.Buttons.AddRange
(
new EditorButton[]
{
new EditorButton
(
ButtonPredefines.Glyph,
"Edit",
-1,
true,
true,
false,
ImageLocation.MiddleLeft,
Properties.Resources.edit
),
new EditorButton
(
ButtonPredefines.Glyph,
"Delete",
-1,
true,
true,
false,
ImageLocation.MiddleLeft,
Properties.Resources.delete
)
}
);
#endregion
#region 명령 컬럼을 설정한다.
GridColumn commandColumn = this.gridView.Columns.AddField("Command");
commandColumn.UnboundType = UnboundColumnType.Object;
commandColumn.Visible = true;
commandColumn.Width = 150;
commandColumn.OptionsEditForm.Visible = DefaultBoolean.False;
#endregion
this.gridView.ShowingEditor += gridView_ShowingEditor;
this.gridView.CustomRowCellEdit += gridView_CustomRowCellEdit;
this.gridView.CustomRowCellEditForEditing += gridView_CustomRowCellEditForEditing;
this.repositoryItemButtonEdit.ButtonClick += repositoryItemButtonEdit_ButtonClick;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 그리드 뷰 에디터 표시시 처리하기 - gridView_ShowingEditor(sender, e)
/// <summary>
/// 그리드 뷰 에디터 표시시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridView_ShowingEditor(object sender, CancelEventArgs e)
{
GridView gridView = sender as GridView;
e.Cancel = gridView.FocusedColumn.FieldName != "Command";
}
#endregion
#region 그리드 뷰 커스텀 행/셀 편집시 처리하기 - gridView_CustomRowCellEdit(sender, e)
/// <summary>
/// 그리드 뷰 커스텀 행/셀 편집시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
GridView gridView = sender as GridView;
if(e.RowHandle == gridView.FocusedRowHandle && e.Column.FieldName == "Command")
{
e.RepositoryItem = this.repositoryItemButtonEdit;
}
}
#endregion
#region 그리드 뷰 편집용 커스텀 행/셀 편집시 처리하기 - gridView_CustomRowCellEditForEditing(sender, e)
/// <summary>
/// 그리드 뷰 편집용 커스텀 행/셀 편집시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridView_CustomRowCellEditForEditing(object sender, CustomRowCellEditEventArgs e)
{
GridView gridView = sender as GridView;
if(e.RowHandle == gridView.FocusedRowHandle && e.Column.FieldName == "Command")
{
e.RepositoryItem = this.repositoryItemButtonEdit;
}
}
#endregion
#region 저장소 항목 버튼 에디터 버튼 클릭시 처리하기 - repositoryItemButtonEdit_ButtonClick(sender, e)
/// <summary>
/// 저장소 항목 버튼 에디터 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void repositoryItemButtonEdit_ButtonClick(object sender, ButtonPressedEventArgs e)
{
switch(e.Button.Caption)
{
case "Edit" :
this.gridView.CloseEditor();
this.gridView.ShowEditForm();
break;
case "Delete" :
this.gridControl.BeginInvoke
(
new MethodInvoker(() => { this.gridView.DeleteRow(this.gridView.FocusedRowHandle); })
);
break;
}
}
#endregion
}
}