해당 컬럼 전체 이벤트 발생해주는 코드
cd405에서 3개의 컬럼을 제어하기때문에 3개의 컬럼의 필드네임을 가져옴
grvAllg.Columns.ColumnByFieldName("hstkVrsnCd").OptionsColumn.AllowEdit = false;
grvAllg.Columns.ColumnByFieldName("hstkVrsnCd").OptionsColumn.ReadOnly = true;
grvAllg.Columns.ColumnByFieldName("hstkTypCd").OptionsColumn.AllowEdit = false;
grvAllg.Columns.ColumnByFieldName("hstkTypCd").OptionsColumn.ReadOnly = true;
grvAllg.Columns.ColumnByFieldName("hstkInqryCd").OptionsColumn.AllowEdit = false;
grvAllg.Columns.ColumnByFieldName("hstkInqryCd").OptionsColumn.ReadOnly = true;
그런데 문제는 위와 같이 코드를 작성하면 행추가시 3컬럼에 해당하는 모든 row가 수정가능하게 되는 일이 발생한다 나는 행추가되는 로우만 수정해주고 싶은데 말이다.
과장님께서 해결해주신 코드
using DevExpress.XtraGrid.Views.Grid; --> 이거 임포트 반드시 해주어야 한다.
public VHMGZCD405S()
{
InitializeComponent();
ActionBtnSetting();
InitComboBox();
grvAllg.ShowingEditor += GrvAllg_ShowingEditor;
}
private void GrvAllg_ShowingEditor(object sender, CancelEventArgs e)
{
var view = sender as GridView;
string fieldName = view.FocusedColumn.FieldName;
// 추가된 행은 입력가능
if (view.GetFocusedDataRow().RowState == DataRowState.Added)
{
e.Cancel = false;
}
if (view.GetFocusedDataRow().RowState == DataRowState.Detached)
{
e.Cancel = false;
}
else //추가된행이 아닐때 기존행.
{
// 식별코드인 경우, 수정불가
if (fieldName == "hstkVrsnCd")
{
e.Cancel = true;
}
else if (fieldName == "hstkTypCd")
{
e.Cancel = true;
}
else if (fieldName == "hstkInqryCd")
{
e.Cancel = true;
}
//else
//{
// e.Cancel = false;
//}
}
}
그리드뷰의 이벤트중 ShowingEditor를 사용해서 해결할 수 있었다.
해당 그리드에 행추가(added, Detached)시 추가되는 row와 원하는 컬럼을 설정해서 이벤트를 제어할 수 있었다.