퇴근5분전

 

+ TreeList...  그리고 VGridControl

 

 지금 프로젝트에서 사용하는 사용컨트롤인데...

처음 접하는 프로젝트였으므로 공부를 해볼 시간이 필요했는데, 잘 안되었다...

 

 경험자였던 팀원분은 두달간 메뉴 여섯개 두달간 만드시다 잘렸고...

 

근데 막상 쭉 해보니 별건 아닌데... 왜 두달이 걸렸을까?

추가사항이나 수정사항이 나올때마다 왜 프로그래밍을 이렇게 했을까 싶을 정도로... 생각이 안잡힌다.

 

너무 복잡했던 사용법들때문에 그냥 집에서 사용법들을 알아봤다.

 

private void InitTreeList()
        {
            TreeListColumn tcKey = treeList1.Columns.Add();
            tcKey.FieldName = "Key";
            tcKey.Caption = "메뉴ID";
            tcKey.Visible = true;
            tcKey.VisibleIndex = 2;

            TreeListColumn tcName = treeList1.Columns.Add();
            tcName.FieldName = "Name";
            tcName.Caption = "메뉴명";
            tcName.Visible = true;
            tcName.VisibleIndex = 1;
            treeList1.KeyFieldName = "Key";
            treeList1.ParentFieldName = "Prn_Key";
            treeList1.DataSource = GetDataSource();
        }

 

초간단 바인딩.

 

그러면 트리가 짠!

 

데이타 입력 수정 삭제 처리시 트리에 색상 반영은.

 

private void treeList1_NodeCellStyle(object sender, DevExpress.XtraTreeList.GetCustomNodeCellStyleEventArgs e)
        {
            DataRowView currentNode = treeList1.GetDataRecordByNode(e.Node) as DataRowView;
            if (currentNode != null)
            {
                if (currentNode.Row.RowState == DataRowState.Added)
                {
                    e.Column.AppearanceCell.ForeColor = Color.Blue;
                }
                else if (currentNode.Row.RowState == DataRowState.Modified)
                {
                     e.Column.AppearanceCell.ForeColor = Color.Green;
                }
                else if (currentNode.Row.RowState == DataRowState.Deleted)
                {
                     e.Column.AppearanceCell.ForeColor = Color.Silver;
                }
                else
                {
                     e.Column.AppearanceCell.ForeColor = Color.Black
                }
            }
        }

 

그리고 treeList1.GetDataRecordByNode <-- 요 메서드

바인딩 된 노드의 데이타객체로 변환하는 메서드

 

추가적으로

private void GetChangeDataButton_Click(object sender, EventArgs e)
        {
            StringBuilder query = new StringBuilder();
            var table = treeList1.DataSource as DataTable;
            var chage = table.GetChanges();
            if (chage != null)
            foreach (DataRow dr in chage.Rows)
            {
                if ((dr.RowState & (DataRowState.Modified | DataRowState.Added | DataRowState.Deleted)) > 0)
                {
                    query.AppendFormat("MenuID = {0}, MenuName = {1}" + Environment.NewLine, dr[0], dr[1]);
                }
            }
            MessageBox.Show("" + query);
        }

 

이건 바인딩 된 데이타의 변경된 데이타만을 가져오는 부분.

 

또 여기에 VGridControl 췟!

 

팀원이었던 분이 써놓은 컨트롤인데 ... 이것도 당췌 왜 그렇게 사용했는지 알수가 없는데

사용이 겁나게 단순한데...

 

  private void InitVGrid()
        {
            var keyEdit = new DevExpress.XtraVerticalGrid.Rows.EditorRow("Key");
            keyEdit.Properties.Caption = "메뉴ID";
            keyEdit.Properties.ReadOnly = true;
            vGridControl1.Rows.Add(keyEdit);

            var nameEdit = new DevExpress.XtraVerticalGrid.Rows.EditorRow("Name");
            nameEdit.Properties.Caption = "메뉴명";
            nameEdit.Properties.ReadOnly = false;
            vGridControl1.Rows.Add(nameEdit);
            vGridControl1.DataSource = treeList1.DataSource;
        }

 

요렇게 ㅡ.,ㅡ;; 끝.

그냥 저거 한줄이면 되는데...

 

음... 그분은 왜? 객체를 몇개나 만들어서 줬다 받았다 했을까?

 

 

 

 

 

 

 

 

 

 

'# 4) .Net ( Vs 2010 ) > DevExpress' 카테고리의 다른 글

ButtonEdit  (0) 2015.01.25
Grid  (0) 2015.01.25