! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

[Winforms] C1FlexGrid 조건에 따른 column, row, cell 스타일 등 속성 변경하고싶습니다. > Q&A | 토론

본문 바로가기

WinForms윈폼 [Winforms] C1FlexGrid 조건에 따른 column, row, cell 스타일 등 속성 변경하고싶습니다.

페이지 정보

작성자 chany 작성일 2022-10-17 15:49 조회 1,255회 댓글 4건
제품 버전 : 2022.v1
컨트롤 이름 : C1FlexGrid

본문

안녕하세요 문의사항있어 게시글 남깁니다.

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에 영향을 미치는지 궁금합니다.

chany님의 댓글

chany 작성일

StyleNew 로 coloumn color, align, datatype 제어까지 했습니다.

다만, 한 로우의 한 컬럼 값에 따라 다른 컬럼 혹은 해당 로우 AllowEditing 속성, backcolor 속성 등 적용이 되질 않습니다. 
위 글의 // Check Out에 따른 Edit 가능여부 제약 에 해당하는 부분입니다.

테스트로   this.flex.Rows[10].Style = this.flex.Styles["cellLightGray"];
코드를  어디다 놓아도 적용되지 않습니다.

GCK싸이먼님의 댓글

GCK싸이먼 작성일

안녕하세요, 그레이프시티 입니다.

문의주신 내용 중,
//ComboList 컬럼별로 수정 필요. 현재 다른 컬럼도 일괄 변경됨.
this.flex.Cols[7].ComboList = "M|P";
this.flex.Cols[22].ComboList = "0|1|2";

해당 소스코드를 적용하시면, 코드를 적용하신 Column 이외의 다른 Column에도 일괄적으로 콤보 리스트가 적용된다는 것으로 이해가 됩니다. 이해한 내용이 맞습니까?

chany님의 댓글의 댓글

chany 작성일

7번과 22번 컬럼에 0|1|2 콤보리스트가 적용됩니다.

다른 이야기지만 수정가능한 컬럼은 수정시 typeof(Boolean)이 적용되어 셀이 체크박스로 변합니다.

모두 Style과 StyleNew Property를 활용하여 조치하였습니다.

1 답변

WinForms윈폼 Re: [Winforms] C1FlexGrid 조건에 따른 column, row, cell 스타일 등 속성 변경하고싶습니다.

추천0 이 글을 추천하셨습니다 비추천0

페이지 정보

작성자 GCK싸이먼 작성일 2022-10-21 17:43 댓글 0건

본문

첨부파일

안녕하세요 그레이프시티입니다.


C1FlexGrid의 셀,행,열 요소의 우선순위에 대해 안내드리겠습니다.

설정 우선순위는 Row < Coulmn < Cell / CellRange 순서 입니다.

따라서 기존에 Column에서 속성이 부여되면, 이후에 Row에서 부여한 속성으로 갱신이 되지 않습니다.

만약 순차적으로 적용된 속성을 갱신하시고 싶으신 경우에는 아래와 같이 

우선순위가 높은 Cell과 CellRange를 활용해주시기 바랍니다.

CellRange cr = c1FlexGrid1.GetCellRange(1, 3, c1FlexGrid1.Rows.Count-1, 3);
cr.Style = cs5;


CellRange를 활용하여 이전에 부여된 Col.BackColor 속성을 변경하는 예제 프로젝트를 첨부드립니다.



추가로 궁금하신 사항은 문의해 주시기 바랍니다.

감사합니다.

그레이프시티 드림.


댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.