예제 #1
0
        /// <summary>
        /// フィルタ設定
        /// </summary>
        /// <param name="cur"></param>
        /// <param name="grid"></param>
        /// <param name="condition"></param>
        /// <param name="msg"></param>
        //HACK 引数msgは使用していない。
        public void SetGridFilter(Cursor cur, C1FlexGrid grid, string condition, string msg)
        {
            // フィルタを構成します。
            _searchFilter.Condition1.Operator  = ConditionOperator.Contains;
            _searchFilter.Condition1.Parameter = condition;

            int count = 0;

            try {
                // フィルタを設定します。
                grid.BeginUpdate();
                for (int r = grid.Rows.Fixed; r < grid.Rows.Count; r++)
                {
                    bool visible = false;
                    for (int c = grid.Cols.Fixed; c < grid.Cols.Count; c++)
                    {
                        Column col = grid.Cols[c];
                        Object val = null;
                        //表示列のみフィルタ対象とする。
                        if (col.Visible == true)
                        {
                            if (col.DataMap != null)
                            {
                                //プルダウンの場合、名称でフィルタリング
                                Dictionary <string, string> dic = (Dictionary <string, string>)col.DataMap;
                                if (dic.ContainsKey(StringUtil.NullToBlank(grid[r, c])))
                                {
                                    val = dic[grid[r, c].ToString()].ToString();
                                }
                            }
                            else
                            {
                                val = grid[r, c];
                            }
                        }
                        if (_searchFilter.Apply(val))
                        {
                            visible = true;
                            count++;
                            break;
                        }
                    }
                    grid.Rows[r].Visible = visible;
                    Application.DoEvents();
                }
            } finally {
                grid.EndUpdate();
            }
        }
예제 #2
0
        /// <summary>
        /// FlexGrid를 트리 형식으로 구성한다.
        /// e.g.) felxGrid.x_TreeSetting(datasource, 0, 1, false, false, false);
        /// </summary>
        /// <param name="flexGrid"></param>
        /// <param name="dt">바인딩을 위한 데이터 소스(데이터 소스는 표현될 트리와 동일한 형식으로 구성되어 있어야 함. 트리 노드에 나타날 컬럼과 현재 노드의 레벨이 반드시 지정되어 있어야 함</param>
        /// <param name="treeCol">트리노드에 나타날 컬럼의 인덱스</param>
        /// <param name="levelCol">노드의 레벨 정보를 가지고 있는 컬럼의 인덱스</param>
        /// <param name="expandLevel">처음 로드시 확장될 레벨 값 (e.g. 0으로 지정된 경우 최상위 노드만 보여지고 나머지 레벨은 접혀있음)</param>
        /// <param name="isVertical">트리를 수직으로 표현할 지를 결정. 즉 노드의 수평 라인을 제거</param>
        /// <param name="isHeader">헤더 표시 여부</param>
        /// <param name="isTopLevel">최상위 노드 표시 여부</param>
        /// <remarks>
        /// -------------------------------------
        /// | treeCol     | level | etc1 | etc2 |
        /// -------------------------------------
        /// | 대분류 Data |   0   | etc1 | etc2 |
        /// -------------------------------------
        /// | 소분류 Data |   1   | etc1 | etc2 |
        /// -------------------------------------
        /// | 중분류 Data |   2   | etc1 | etc2 |
        /// -------------------------------------
        ///
        /// e.g.) flexGrid.x_TreeSetting(datasource, 0, 1, false, false, false);
        /// </remarks>
        public static void x_TreeSetting(this C1FlexGrid flexGrid, System.Data.DataTable dt, int treeCol, int levelCol, int expandLevel, bool isVertical, bool isHeader, bool isTopLevel)
        {
            int START_ROW = 0;
            int END_ROW   = 0;

            treeCol  += 10;
            levelCol += 10;
            if (dt.Rows.Count == 0)
            {
                return;
            }

            flexGrid.BeginUpdate();

            //Tree 초기화(ROW선 없앰)
            if (isVertical)
            {
                C1.Win.C1FlexGrid.CellStyle cs = flexGrid.Styles.Normal;
                cs.Border.Direction = C1.Win.C1FlexGrid.BorderDirEnum.Vertical;
            }

            flexGrid.Tree.Column  = treeCol;
            flexGrid.Tree.Style   = TreeStyleFlags.Simple;
            flexGrid.AllowMerging = AllowMergingEnum.Nodes;
            flexGrid.Tree.Indent  = 1;

            //최상위레벨 존재하는 경우
            if (isTopLevel)
            {
                flexGrid.Rows.Count = dt.Rows.Count + flexGrid.Rows.Fixed + 1;
                START_ROW           = 1;
                END_ROW             = dt.Rows.Count + 1;
                flexGrid.SetData(flexGrid.Rows.Fixed, levelCol, 0);
                flexGrid.SetData(flexGrid.Rows.Fixed, treeCol, "[전체]");
                flexGrid.Rows[flexGrid.Rows.Fixed].IsNode     = true;
                flexGrid.Rows[flexGrid.Rows.Fixed].Node.Level = 0;
            }
            else
            {
                flexGrid.Rows.Count = dt.Rows.Count + flexGrid.Rows.Fixed;
                START_ROW           = 0;
                END_ROW             = dt.Rows.Count;
            }

            for (int i = START_ROW; i < END_ROW; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    if (flexGrid.Cols.Count == 0)
                    {
                        flexGrid.SetData(i + flexGrid.Rows.Fixed, j, dt.Rows[i - START_ROW][j]);
                    }
                    else if (flexGrid.Cols.Count > 0 && FlexGridFindCol(flexGrid, dt.Columns[j].ColumnName) > -1)
                    {
                        flexGrid.SetData(i + flexGrid.Rows.Fixed, dt.Columns[j].ColumnName, dt.Rows[i - START_ROW][j]);
                    }
                    else
                    {
                        continue;
                    }
                }
                // 로우에 노드를 만든다
                flexGrid.Rows[i + flexGrid.Rows.Fixed].IsNode = true;
                // 노드의 레벨을 설정(Level)
                flexGrid.Rows[i + flexGrid.Rows.Fixed].Node.Level = ToInt(flexGrid.Rows[i + flexGrid.Rows.Fixed][levelCol]);
            }

            //노드확장 수준 결정
            if (isTopLevel)
            {
                flexGrid.Rows[flexGrid.Rows.Fixed].Node.Collapsed = true;
            }

            for (int i = START_ROW; i < END_ROW; i++)
            {
                //확장레벨보다 하위레벨이면 Collapse처리
                if (ToInt(flexGrid.Rows[i + flexGrid.Rows.Fixed][levelCol]) >= expandLevel)
                {
                    flexGrid.Rows[i + flexGrid.Rows.Fixed].Node.Collapsed = true;
                }
                else
                {
                    flexGrid.Rows[i + flexGrid.Rows.Fixed].Node.Collapsed = false;
                }
            }

            //헤더표시 여부
            if (!isHeader)
            {
                for (int i = 0; i < flexGrid.Rows.Fixed; i++)
                {
                    flexGrid.Rows.Remove(i);
                }

                flexGrid.Rows.Fixed = 0;
            }

            flexGrid.EndUpdate();
            flexGrid.Refresh();
        }