닷넷/WinForms

C# WinForms DevExpress GridControl 체크박스칼럼에서 체크한 것이 고정이 안 될 때, When the check is not fixed in the check column

FreeBear 2021. 7. 7. 11:00
반응형

DevExpress의 GridControl에서 칼럼 하나를 체크박스칼럼으로 만들고,

칼럼의 UnboundType을 Bound로 설정하고, FieldName이 checkcolumn이라고 하면

gridControl.DataSource = list 일때, list.checkcolumn이 있으면 bound 된 값대로 false 혹은 true를 가지게 되어

2021.06.14 - [프로그래밍/C# (WinForms, ASP.NET)] - DevExpress GridControl에서 셀 편집(SetRowCellValue)이 되지 않을 때, 체크가 안 될 때 등

앞서 포스팅 한대로 설정했다는 가정하에

체크박스칼럼의 셀에서 체크박스에 체크하면 체크하는 대로 체크를 하지 않으면 하지 않은대로 설정 된다.

 

그런데 바운드 데이터와는 상관없는 칼럼인 경우

체크박스 칼럼이기때문에 UnboundType을 Boolean으로 설정하면 

(FieldName은 cSelect로 설정했다.)

 

repositoryItemCheckEdit에서 NullStyle을 설정한 대로

체크박스 셀을 클릭해서 체크를 해도 다른 것을 클릭하면 클릭했었던 값이 NullStyle로 돌아간다.

(예시의  NullStyle은 Unchecked다.)

예시 NullStyl Unchecked

 

체크가 고정이 되지 않는다.

 

해결 방법은 해당 gridControl의 gridView에 이벤트를 추가하면 된다.

gridControl의 level designer에서 gridView를 클릭하거나

 

속성에서 gridView을 선택한 다음 CustomUnboundColumnData 이벤트를 더블 클릭하여 추가한다.

 

그 다음 아래와 같이 코딩한다.

// 전역변수로 onSelect 선언
List<bool> onSelect = new List<bool>();

...
{
	...
    // gridControl에 데이터를 넣기 전 onSelect에 row count만큼 초기값 넣기
    for (int i = 0; i < list.Count; i++)
    {
        onSelect.Add(false);
    }
    ...
    gridControlDataSource = list;
}

// CustomUnboundColumnData 이벤트 설정
private void gridView_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{
    if (e.Column.FieldName == "cSelect")
    {
        if (e.IsGetData)
            e.Value = onSelect[e.ListSourceRowIndex];
        if (e.IsSetData)
            onSelect[e.ListSourceRowIndex] = (bool)e.Value;
    }
}

 

빌드 후 확인 해보면 

체크한 것이 그대로 고정 된다.

반응형