WinForms윈폼 [Winforms] C1FlexGrid 조건에 따른 column, row, cell 스타일 등 속성 변경하고싶습니다.
페이지 정보
작성자 chany 작성일 2022-10-17 15:49 조회 1,255회 댓글 4건본문
관련링크
안녕하세요 문의사항있어 게시글 남깁니다.
flexgrid 를 조건에 따라 이벤트에 다라 column, row, cell을 자유자재로 다루고 싶습니다.
아래 [문의사항]과 [첨부]에 작성 중인 코드 일부를 남깁니다.
[문의사항]
1. flexgrid Cols, Rows, Cells 각각 Style, DataType, AllowEditing, IsVisible 등 속성 변경 시
우선 적용 되는 순서 문의드립니다.
예를 들어 rows 색변경 > cols 색변경, cols 색변경 > rows 색변경 순서로 코드를 짜도 cols 색변경이 최종적으로 적용됩니다. 맘같아서는 Cell 별 모두 제어하고 싶습니다.
2. Cols["A"]와 Cols["B"]의 DataType 등 속성을 변경하면 각 컬럼에 맞게 DataType 등 속성이 맞게 들어가지 않습니다.
예를 들어 B에 적용한 내용이 A에도 함께 적용이 되는 현상
또는 A와 B 외 다른 컬럼을 수정했을때 B의 적용한 속성이 다른컬럼에 적용되는 현상 등이 발생합니다.
초기화가 필요한건지 그렇다면 어떻게 해야하는 것인지 등 개별 컬럼 제어하는 방법 문의드립니다.
[첨부]
public View()
{
InitializeComponent();
var ds = Controller.GetData(); // 계층형 collection 데이터 불러오기
// C1FlexGrid Styles 별도 class 운영
CustomStyles.GetStyles(flex);
FillGridWithData(flex, ds); // column 정의, node 정의, row 값 입력 등
FillFormsWithCommonData();
#region setting columns properties
List<string> editableCols = new List<string>();
editableCols.Add("Type");
editableCols.Add("No");
editableCols.Add("Code");
editableCols.Add("Section");
editableCols.Add("Comments");
editableCols.Add("Size");
editableCols.Add("Supplier");
editableCols.Add("Title");
// for testing
//editableCols.Add("CheckOut");
editableCols.Add("Assign");
List<string> visibleCols = new List<string>();
visibleCols.Add("FormattedTitle");
visibleCols.Add("CheckOut");
visibleCols.Add("Assign");
visibleCols.Add("Type");
visibleCols.Add("Quantity");
visibleCols.Add("No");
visibleCols.Add("Section");
visibleCols.Add("Company");
visibleCols.Add("Comments");
visibleCols.Add("Size");
visibleCols.Add("Spec");
visibleCols.Add("Supplier");
visibleCols.Add("Title");
for (int i = 0; i < flex.Cols.Count; i++)
{
this.flex.Cols[i].AllowDragging = true;
this.flex.Cols[i].AllowMerging = false;
this.flex.Cols[i].AllowSorting = false;
// 컬럼 수정 가능 여부 설정
if (editableCols.Contains(flex.Cols[i].Name))
{
this.flex.Cols[i].AllowEditing = true;
this.flex.Cols[i].Style = this.flex.Styles["cellWhite"];
if (flex.Cols[i].Name.Equals("Type"))
{
this.flex.Cols[i].Style = this.flex.Styles["cellWhiteCenter"];
}
}
else
{
this.flex.Cols[i].AllowEditing = false;
this.flex.Cols[i].Style = this.flex.Styles["cellLightGray"];
if (flex.Cols[i].Name.Equals("CheckOut") || flex.Cols[i].Name.Equals("Assign") || flex.Cols[i].Name.Equals("Quantity"))
{
this.flex.Cols[i].Style = this.flex.Styles["cellLightGrayCenter"];
}
}
// 컬럼 표기 여부 설정
if (visibleCols.Contains(flex.Cols[i].Name) || i == 0)
{
this.flex.Cols[i].Visible = true;
}
else
{
this.flex.Cols[i].Visible = false;
}
}
// Check Out에 따른 Edit 가능여부 제약
for (int i = 1; i < this.flex.Rows.Count; i++)
{
if (this.flex.Rows[i]["CheckOut"].Equals(true))
{
this.flex.Rows[i].AllowEditing = true;
}
else
{
this.flex.Rows[i].AllowEditing = false;
this.flex.Rows[i].Style = this.flex.Styles["cellLightGray"];
}
}
// 컬럼 헤더 설정
this.flex.Styles["Fixed"].Font = new System.Drawing.Font("Gulim", 11, FontStyle.Bold);
this.flex.Styles["Fixed"].TextAlign = TextAlignEnum.CenterCenter;
this.flex.AutoSizeCols();
// 컬럼 데이터타입 설정. checkbox, comboList 등
this.flex.Cols["CheckOut"].DataType = typeof(Boolean);
this.flex.Cols["Assign"].DataType = typeof(Boolean);
// ComboList 컬럼별 적용 수정 필요. 현재 다른 컬럼도 일괄 변경됨.
//this.flex.Cols[7].ComboList = "M|P";
//this.flex.Cols[22].ComboList = "0|1|2";
// Mapped List 적용 컬럼
#endregion
// 필터 기능
this.flex.ColumnPickerInfo.ShowToolButton = true;
this.flex.ColumnPickerInfo.SearchMode = ColumnPickerSearchMode.Highlight;
}
댓글목록
chany님의 댓글
chany 작성일
Custom Styles | FlexGrid for WinForms | ComponentOne (grapecity.com)
위 링크를 보면 일회용 용도인 StyleNew와 재활용 용도인 Style 로 제어가 가능한지 테스트 중입니다.
테스트 중 추가문의사항이 있어 댓글답니다. 혹시 datatype 속성이 style에 영향을 미치는지 궁금합니다.