UltraWinGrid Infragistics Netadvantage - FrameWork

# 머리말

WinGrid 를 편리하게 사용하기 위해서 프레임워크로 만들었습니다.
컬럼을 정렬 생성하고, 그리드의 매스크등을 셋팅을 편리하게 할 수 있습니다.

1차 구현 현황
Windows Form UltraWinGrid Infragistics Netadvantage 2008.3 CLR2.0 버전 ver 0.1

1. 컬럼헤더 fix(고정) / 컬럼헤더 스타일 지정 / 이동고정 및 이동가능
2. row numbering 처리
3. 셀 정렬기능
4. 셀 maskedit 처리
* varchar형 무자열 숫자를 maskedit로 원하는 포멧으로 표현
5. 셀 타입지정( 버튼, 콤보, 달력 등)
6. 포멧형 (숫자의경우 글러벌 통화 단위 지정 및 , 자동세팅)
7. 홀수줄 마다 원하는 줄번호 색 세팅
8. 셀 편집여부 지정
9. 엑셀다운로드 기능


# 사용하기

참고링크 : http://cdmanii.tistory.com/684






# 핵심 소스부분

< Using 하기 >
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Infragistics.Win.UltraWinGrid;
using Infragistics.Win;
using System.Drawing;
using Infragistics.Win.UltraWinMaskedEdit;
using System.Globalization;
using System.Data;
using Infragistics.Win.UltraWinGrid.ExcelExport;
using System.IO;



< 그리드의 속성을 지정하기 >

    //================================== Class History Comments ==================================
    // 파  일  명 : GridUtil.cs
    // 최초작성자 : Park Kwang Ho
    // 최초작성일 : 2009.01.15
    // 
    // 수정이력
    // -------------------------------------------------------------------------------------------
    // 수정일       수정자      수정내용
    // -------------------------------------------------------------------------------------------
    //============================================================================================
    /// <summary>
    ///  UltraWinGrid 디자인속성 세팅, Align, 컬럼헤더 지정, 컬럼Span
    /// </summary>

        /// <summary>
        /// Sets the grid format.
        /// </summary>
        /// <param name="winGrid">The win grid.</param>
        /// <param name="gridType">Type of the grid.</param>
        /// <param name="scrollDirection">The scroll direction.</param>
        public static void SetGridFormat(UltraGrid winGrid, string gridType, Scrollbars scrollDirection)
        {
            // 컬럼클리어함
            winGrid.DisplayLayout.ClearGroupByColumns();

            // 컬럼 자동생성 해지
            winGrid.DisplayLayout.NewColumnLoadStyle = NewColumnLoadStyle.Hide;

            // 스크롤바 설정
            winGrid.DisplayLayout.Scrollbars = scrollDirection;

            // 자동컬럼크기
            winGrid.DisplayLayout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;

            // 그리드 캡션 안보이게 설정함
            winGrid.DisplayLayout.CaptionVisible = DefaultableBoolean.False;


            winGrid.DisplayLayout.ColumnChooserEnabled = DefaultableBoolean.True;
            winGrid.DisplayLayout.Bands[0].ExcludeFromColumnChooser = ExcludeFromColumnChooser.True;

            // GroupByBox 설정
            //winGrid.DisplayLayout.GroupByBox.ShowBandLabels = ShowBandLabels.All;
            //winGrid.DisplayLayout.GroupByBox.Prompt = "컬럼 그룹박스 텍스트";
            //winGrid.DisplayLayout.GroupByBox.PromptAppearance.BackColor = Color.Blue;
            winGrid.DisplayLayout.GroupByBox.Hidden = true;

            //TabKey누르면 다음셀로이동 // Set the behaviour of tab keys in the UltraGrid.
            winGrid.DisplayLayout.TabNavigation = TabNavigation.NextCell;
            winGrid.DisplayLayout.Appearance.TextHAlign = HAlign.Left;

            // 헤더 색상설정
            winGrid.DisplayLayout.Override.HeaderAppearance.BackColor = Color.SteelBlue;
            winGrid.DisplayLayout.Override.HeaderAppearance.BackColor2 = Color.SteelBlue;

            winGrid.DisplayLayout.Override.HeaderAppearance.ForeColor = Color.White;
            winGrid.DisplayLayout.Override.HeaderAppearance.FontData.Bold = DefaultableBoolean.True;

            //홀수줄 색깔지정
            winGrid.DisplayLayout.Override.RowAlternateAppearance.BackColor = Color.Snow;

            //헤더속성
            winGrid.DisplayLayout.UseFixedHeaders = true;
            winGrid.DisplayLayout.Bands[0].Override.FixedHeaderIndicator = FixedHeaderIndicator.None;
            //winGrid.DisplayLayout.Override.FixedHeaderAppearance.BackColor = Color.LightYellow;
            //winGrid.DisplayLayout.Override.FixedCellAppearance.BackColor = Color.LightYellow;
            //winGrid.DisplayLayout.Override.FixedCellSeparatorColor = Color.Red;
            winGrid.DisplayLayout.Bands[0].Override.HeaderStyle = HeaderStyle.WindowsXPCommand; //헤더 스타일
            winGrid.DisplayLayout.Bands[0].Override.HeaderAppearance.TextHAlign = HAlign.Center; //헤더정렬: Center


            #region ---- row numbering ----

            // Set the RowSelectorNumberStyle to enable the row-numbers.
            winGrid.DisplayLayout.Override.RowSelectorNumberStyle = RowSelectorNumberStyle.VisibleIndex;

            // You can control the appearance of the row numbers using the RowSelectorAppearance.
            winGrid.DisplayLayout.Override.RowSelectorAppearance.ForeColor = Color.White;
            winGrid.DisplayLayout.Override.RowSelectorAppearance.FontData.Bold = DefaultableBoolean.True;

            // You can explicitly set the width of the row selectors if the default one calculated
            // by the UltraGrid is not enough.
            // 로우넘버링 넓이
            winGrid.DisplayLayout.Override.RowSelectorWidth = 40;


            // RowSelectors indicate whether row selectors are displayed. Each row has a row selector
            // on the left side of the row. It's used to activate and select rows. Row selectors are
            // visible by default, however you can set the RowSelectors property on the override to
            // False to hide the row selectors.
            winGrid.DisplayLayout.Bands[0].Override.RowSelectors = DefaultableBoolean.True;


            // You can use the RowSelectorAppearance property customize the appearance of the row selectors.
            // 색상지정 및 가운데 정렬
            winGrid.DisplayLayout.Override.RowSelectorAppearance.BackColor = Color.SteelBlue;
            winGrid.DisplayLayout.Override.RowSelectorAppearance.BackColor2 = Color.SteelBlue;
            winGrid.DisplayLayout.Override.RowSelectorAppearance.TextHAlign = HAlign.Center;

            // You can override that grid-wide setting for a particular band by setting it on the
            // override of that band.
            //winGrid.DisplayLayout.Bands[1].Override.RowSelectors = DefaultableBoolean.False;
            #endregion


            // Wingrid Unbinding 상태에서는 Row NewAdd()를 할수가 없다. 그래서 빈로우를 바인드 시킴
            // 조회후 Bind된 상태에서는 Row NewAdd()가 가능하다
            DataSet rtnDs = new DataSet();
            rtnDs.Tables.Add("_BlinkTable");
            //ultraGrid1.DisplayLayout.AddNewBox.Hidden = false;  //AddNew 안보이게 설정함
            winGrid.DataSource = rtnDs;
            winGrid.DataBind();





            switch (gridType.ToUpper().ToString())
            {
                case "S":
                    // onserver만 컬럼이동가능
                    // 그리드속성 셀선택만 가능(모든셀 편집막음)
                    winGrid.DisplayLayout.Override.CellClickAction = CellClickAction.CellSelect;
                    winGrid.DisplayLayout.Override.ActiveRowCellAppearance.BackColor = Color.Snow;
                    winGrid.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.Black;

                    break;

                case "E":
                    // 컬럼이동불가능
                    winGrid.DisplayLayout.Override.CellClickAction = CellClickAction.EditAndSelectText;
                    winGrid.DisplayLayout.Override.ActiveCellAppearance.BackColor = Color.Snow;
                    winGrid.DisplayLayout.Override.ActiveCellAppearance.ForeColor = Color.Black;

                    break;

                case "N;":
                    // 컬럼이동불가능

                    break;
            }
        }



< 컬럼 속성을 지정합니다 >
컬럼속성을 아래와 같은 원형이고 소스는  모두 공개하지 않겠습니다.
별거는 아니지만 요청하신 분의 메일이나 블로그 정보가 없어서 모두 공개하지 않겠습니다.
의도를 알려주시면 모두 공개하겠습니다. ^^

아래와 같은 원형으로 오버로드하여 쓰는 방향으로 작성하였습니다.

        public static void SetGridColumnFormat(UltraGrid winGrid, string sColName, string sColKey, string sColType, int pnWidth, HAlign sAlign, Activation AllowUpdate, bool sHidden, bool fixColKey, string sDataMask)
        {




# 추가

인프라로직스의 How-To 를 참고하여 프레임워크를 완성하였습니다.

이 글은 "씨디맨" 의 동의 없이 전문 재배포 금지. 링크 및 트랙백은 허가 없이 무제한 허용 *  [자세히보기]

질문 또는 댓글을 남겨 주세요.

질문글은 무조건 답변 드리겠습니다. 이곳에 질문을 올려주세요.
이 글과 연관이 없는 급한 질문은 빠른 질문/답변을 이용해 주세요!

댓글 입력 폼

s;s s;s

     이미지 업로드

  1. 건강정보 2009.07.17 02:37 신고

    보는순간 머릿속이 핑글핑글 돌아가는데요~^^

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.07.18 11:31 신고

      뭐 대단한건 아니에요.. 이것저것 합쳐 만든 트렌스포머 같은거요 ^^

      perm. |  mod/del. | 
  2. 빛이드는창 2009.07.17 14:34 신고

    아무리 이해를 해보려고
    기를 써보지만
    너무 어렵다는..ㅎㅎ 아직 이분야를
    접수하지 못했네요 ㅠㅠ..

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.07.18 11:32 신고

      쏭~~
      그거죠!!
      이렇게 만들어 두면 나중에 신경안써도 되는거죠.

      perm. |  mod/del. | 
  3. 전동호 2009.07.17 14:57 신고

    아..공개해 주셨네요..ㅎㅎ

    의도?? 라 함은 Infragistics를 잘 사용하는 방법에 대해서

    생각하는데 머리가 안돌아가서 고수님들의 생각은 어떤건지 알고 싶었던거였습니다.

    그리고 저는 아직 블로그는 없구요 메일은 vegabgens@freechal.com입니다..

    불순한 의도나 이런거는 없구요 워낙 infragistics에 관한 글들이 없고

    있어도 영문이라(영어를 잘 못해서) 모르겠더라구요 ㅠ.ㅠ

    님이 작성한 소스를 보고 열심히 공부하도록 하겠습니다.

    머리가 그리 좋치않아 잘 이해 할라나 모르겠네요..

    공개해 주셔서 넘 감사하구요...

    좋은 하루, 일년, 평생을 보내십시오..

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.07.18 11:34 신고

      우선 메일로 보내드렸구요...
      시간이 없이 이글은 나중에 수정해서 넣어야겠네요.
      오버로드 된부분 중 가장많이 오버로드 된부분을 보내드려서 소스부분은 다있을겁니다.

      블로그는 없으시다니 아쉽네요.
      혹시 글 게시하시려면 링크만 허용됩니다 ^^

      perm. |  mod/del. | 
    • 엔돌슨 2009.07.18 11:37 신고

      저는 팀블로그를 하고 있는 개발자 엔돌슨이구요.
      http://kwangho.tistory.com 은 제 블로그입니다. 질문은 받을 수 있어요.
      부족하지만 도움이 되었으면 합니다.

      perm. |  mod/del. | 
  4. 23 2009.07.17 16:40 신고

    w

    perm. |  mod/del. |  reply.
  5. 드자이너김군 2009.07.17 17:47 신고

    아하핫.. 저도 눈이 돌아가는군요.. ㅋㅋ
    개발자 분들은 정말 대단해요 ㅡㅡb

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.07.18 11:42 신고

      스파이더멘 파피콘이 탐납니다.

      누가 썻던 글이 생각나네요..
      ms가 닷넷 프레임워크를 공개했죠. (좀됐죠^^)
      공개를 하는건 기업입장에서 상당히 민감한 부분일텐데
      왜 공개를 했을까요?

      MS개발자들이 다들 실력이 대단하겠지만,
      가끔 파란화면이 나오듯 사소한(?) 버그라던지
      비효율적인 코드가 있을겁니다.

      공개된 프레임워크는 전세계개발자들이 보겠죠
      보다가 MS개발자들을 비웃으면서 이런 코드를 바로 잡아주겠죠

      그럼 MS개발자는 그 창피함을 받겠지만,
      공짜로 수정된 코드를 얻고 알지 못했던 부분을 바로 잡을 수 있는거죠^^ ㅋㅋ

      perm. |  mod/del. | 
  6. 전동호 2009.07.20 09:47 신고

    안녕하세요. 엔돌슨님

    부푼마음으로 메일을 열었으나 메일이 오지 않았는데요 ㅠ.ㅠ

    다시한번 메일을 보내주시면 감사하겠습니다..

    메일주소 : vegabens@freechal.com입니다.

    공부에 많은 도움이 될것 같습니다..

    님이 주신 관심에 보답하도록 노력하겠습니다..ㅎㅎ

    좋은글 앞으로도 많이 기대하구요..

    자주 들르고 링크도 많이 퍼 나르도록 할게요..

    항상 즐거운 하루 보내시구요..

    혹시나..보탬이 되는 의견이 있으면 메일이나 글 남길게요 ㅎㅎ

    감사합니다.

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.07.20 13:40 신고

      메일이 안갔네요.. Gmail에 코드를 넣어서 그런지
      구글메일이 어쩌구어쩌구 이러면서 리턴되었습니다.

      다시 발송하였습니다 ^^ 도움이 되었으면 합니다.

      perm. |  mod/del. | 
  7. 전동호 2009.07.20 13:52 신고

    ㅎㅎ 네. 다시 확인 하니 잘 받았습니다..

    많은 도움이 되었습니다..

    우선 공통클래스로 빼는 개념 같은게 아직 부족했었는데

    이글을 보고 많은것을 배울수 있었습니다..

    저두 노력하여 남을 도울수 있는 개발자가 되었으면 좋겠네요 ㅎㅎ

    그럼 즐거운 오후 되세요..

    감사합니다.

    perm. |  mod/del. |  reply.
  8. Yasu 2009.07.21 23:34 신고

    수고하셨습니다.

    perm. |  mod/del. |  reply.
  9. 전동호 2009.08.07 15:24 신고

    엔돌슨님의 소스를 기본으로 해서
    UltraWebGrid의 컬럼생성 부분을 공통함수 부분으로 뺀 소스를 만들었습니다.

    엔돌슨 님이 작성한 소스의 그냥 웹버전입니다.
    혹시나 도움이 될까 하고 올려봅니다.

    /// <summary>
    /// 그리드 컬럼을 만드는 함수 입니다.
    /// </summary>
    /// <param name="Grid">그리드 ID</param>
    /// <param name="sHDText">컬럼 헤더 title</param>
    /// <param name="sHDCaption">컬럼 헤더 Caption</param>
    /// <param name="sColKey">컬럼 Key</param>
    /// <param name="sBaseColName">컬럼 DB 바인딩 name</param>
    /// <param name="sColType">컬럼 타입(N:none,C:checkbox,D:dropdownlist)</param>
    /// <param name="nWidth">컬럼 넓이</param>
    /// <param name="HAlign">컬럼 가로 정렬</param>
    /// <param name="AUpdate">컬럼 수정 여부(Yes:수정가능, No:수정불가능)</param>
    /// <param name="colMulty">컬럼 Multiline 여부</param>
    /// <param name="bHidden">컬럼 숨김</param>
    /// <param name="bfixColKey">컬럼 헤더 Fixed</param>
    /// <param name="nColSpan">컬럼 헤더 Colspan</param>
    /// <param name="nRowSpan">컬럼 헤더 Rowspan</param>
    /// <param name="EditControlID">외부 컨트롤을 바인딩 했을때(WebCombo등) 해당 컨트롤 ID</param>
    /// <param name="arrText">Valuelist의 text 배열</param>
    /// <param name="arrVal">Valuelist의 value 배열</param>
    /// <param name="ds">디비의 값을 바인딩 할때 넘길 DataSet</param>
    /// <param name="bMerge">컬럼 merge여부</param>

    public static void SetGridColumnFormat(UltraWebGrid Grid, string sHDText, string sHDCaption, string sColKey, string sBaseColName, string sColType, int nWidth,
    HorizontalAlign HAlign, AllowUpdate AUpdate,CellMultiline colMulty, bool bHidden, bool bfixColKey, int nColSpan, int nRowSpan, string EditControlID,
    string[] arrText, string[] arrVal,DataSet ds, bool bMerge)
    {

    Grid.DisplayLayout.Bands[0].Columns.Add(sColKey, sHDText);
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Width = Unit.Pixel(nWidth);
    if (sBaseColName != "") //빈값이 아닐때만 속성생성
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).BaseColumnName = sBaseColName;
    }
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).CellStyle.HorizontalAlign = HAlign;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).AllowUpdate = AUpdate;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Hidden = bHidden;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Header.Fixed = bfixColKey;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Header.Caption = sHDCaption;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).CellMultiline = colMulty;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).MergeCells = bMerge;
    if (nColSpan > 0)
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Header.RowLayoutColumnInfo.SpanX = nColSpan;
    if (nRowSpan > 0)
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Header.RowLayoutColumnInfo.SpanY = nRowSpan;



    switch (sColType)
    {
    case "N":
    {
    break;
    }
    case "C": //체크박스타입
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Type = ColumnType.CheckBox;
    break;
    }
    case "B": //버튼 타입
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Type = ColumnType.Button;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).CellButtonDisplay = CellButtonDisplay.Always;
    break;
    }
    case "D": //DropDownList
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Type = ColumnType.DropDownList;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).CellButtonDisplay = CellButtonDisplay.Always;

    if (arrText != null && arrVal != null) //valuelist를 사용자가 넘겼을때
    {
    for (int i = 0; i < arrText.Length; i++)
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey("test").ValueList.ValueListItems.Add(new ValueListItem(arrText[i], arrVal[i]));
    }
    Grid.DisplayLayout.Bands[0].Columns.FromKey("test").ValueList.DataBind();
    }

    if (ds != null) //디비에서 값을 받아와 Dataset형태로 넘겼을때
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey("test").ValueList.DataSource = ds.Tables[0];
    Grid.DisplayLayout.Bands[0].Columns.FromKey("test").ValueList.DataBind();
    }
    break;
    }
    case "T": //Custom
    {
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).Type = ColumnType.Custom;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).EditorControlID = EditControlID;
    Grid.DisplayLayout.Bands[0].Columns.FromKey(sColKey).ValueList.DisplayStyle = ValueListDisplayStyle.DisplayText;
    break;

    }
    default:
    {
    break;
    }
    }
    }

    perm. |  mod/del. |  reply.
    • 엔돌슨 2009.08.09 00:20 신고

      오~ 전동호님 감사합니다.

      참고해서쓰면 될거 같아요.
      Netadvantage의 Ultrawebgrid 인거 같네요.

      생각해보면 디자인단에서 하는것과
      뒷단(비하이든단)에서 하는것의 장단점이 있는거 같아요.

      공통된 색상이나 형을 반영하기에는 뒷단이편하고
      디자인을 보면서 하고자 할때는 앞에서 하는것이 편하곤 합니다.

      perm. |  mod/del. | 
  10. 엔돌슨 2009.08.09 00:22 신고

    사실 웹버전도 만들었습니다. 하지만 mutil머징부분이나 등등 반영할것도 많습니다 ^^
    그런데 Paging(페이징)을 하지 않으면 Webgrid가 많이 느리더라구요.
    서버컨트롤이라서 좋은점과 단점을 많이 가지고있습니다.
    도 Netadvantage는 CSOM(스크립트) 지옥입니다 ㅜㅜ

    perm. |  mod/del. |  reply.
  11. 전동호 2009.08.17 14:44 신고

    아 그렇군요 ㅎㅎ
    빨리 속도이런부분이 개선되어
    좀더 좋은 성능을 발휘했으면 좋겠습니다.

    ㅎㅎ

    즐건 하루되세요

    perm. |  mod/del. |  reply.
  12. 윤대일 2010.06.17 16:10 신고

    안녕하세요..
    개발 6년차인데... 암것도 모르는 ,,, 그런.. 개발자입니다. ㅎㅎ
    다른게 아니구요.. dropdownlist, MASKEDIT 부분등.. SetGridColumnFormat 구현 하는중인데(보고 배끼는... ^^;) dataset 불러 오는 부분이랑 대체적으로.. 어려워서
    소스 요청 해 봅니다. ultragrid 편하긴 한데.. 너무 방대해서 힘드네요... ㅜ,ㅜ
    hydeman@paran.com
    블로그가 있지만... 거의 펌글이 대부분이고 잡다합니다....
    ^^

    perm. |  mod/del. |  reply.
  13. 챨스 2011.04.12 16:12 신고

    궁금한게 하나있는데요
    울트라그리드 공부중에 있는데 숫자형식을 보여줄때 1000단위로 콤마를 보여줄려고하는데
    그리드상에 속성이 있을거같은데 못찾겠네요..
    부디 자비를 베푸소서..ㅎㅎ
    밑에 글들보니깐 블로그라던지 그런게 있어야하나요??
    블로그는 없구요 제멜은 minchul-kim@daum.net 이에요

    perm. |  mod/del. |  reply.
  14. 날래 2011.09.09 09:44 신고

    안녕하십니까
    요즘 Infragistics 사용법 때문에 골치가 아픈데요
    조금이라도 이해를 돕고자 소스 좀 제공해 주셨으면 합니다.
    사이트 뒤져 보고 있는데 영 감히 안와서 어디서 부터 어떻게 해야 되는지 모르겠네요.
    이메일 주소는 faeton@naver.com 입니다.

    감사합니다.

    perm. |  mod/del. |  reply.
  15. 요청드립니다. 2011.12.19 21:12 신고

    안녕하세요
    울트라 그리드 공부하고 있는데 좋은 정보가 될 거 같아서 요청 합니다.
    개인용도로만 사용하도록 하겠습니다.ㅣ
    감사합니다.
    heilljp@nate.com

    perm. |  mod/del. |  reply.
  16. 요청드립니다. 2014.02.05 21:03 신고

    안녕하세요 공부하고 있는 개발자 입니다.
    메일로 요청 드리면 받아볼 수 있을까요.?

    heilljp@gmail.com

    perm. |  mod/del. |  reply.