SHIN STORYSHIN STORY
홈포스트C#TypeScriptNext.jsNode.js시리즈
</>SHIN STORY

sdf

탐색

  • 홈
  • 모든 포스트
  • 시리즈
  • 검색

카테고리

  • C#
  • TypeScript
  • Next.js
  • Node.js
  • 알고리즘
  • 개발 도구

© 2025 Shin Blog. All rights reserved.

GitHubRSS
목록으로
C##C#

Devexpress Winform Tip

SHIN

2026년 5월 6일2분 읽기2

GridControl

GridView 핵심 팁컬럼 자동 생성 끄기

CODE
gridView1.OptionsBehavior.AutoPopulateColumns = false;

직접 컬럼을 구성하는 게 유지보수에 좋습니다


읽기 전용 그리드 설정

CODE
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

행 번호 표시

CODE
gridView1.CustomDrawRowIndicator += (s, e) =>
{
    if (e.Info.IsRowIndicator && e.RowHandle >= 0)
    {
        e.Info.DisplayText = (e.RowHandle + 1).ToString();
    }
};
gridView1.IndicatorWidth = 50;

특정 컬럼 숨기기

CODE
gridView1.Columns["ID"].Visible = false;

컬럼 포맷 지정

CODE
gridView1.Columns["Price"].DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
gridView1.Columns["Price"].DisplayFormat.FormatString = "n0";

날짜 포맷

CODE
gridView1.Columns["RegDate"].DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
gridView1.Columns["RegDate"].DisplayFormat.FormatString = "yyyy-MM-dd";

Grid 성능 최적화대량 데이터 바인딩 전후로 UI 갱신을 막으면 빨라집니다.

CODE
gridView1.BeginUpdate();

try
{
    gridControl1.DataSource = dataTable;
}
finally
{
    gridView1.EndUpdate();
}

컬럼 설정도 BeginUpdate() 안에서 처리하는 게 좋습니다.

DataTable 바인딩 팁

CODE
gridControl1.DataSource = dt;
gridView1.BestFitColumns();

단, 데이터가 많을 때 BestFitColumns()는 느릴 수 있으므로 주의하세요.

  • 대량 데이터에서는
CODE
gridView1.OptionsView.ColumnAutoWidth = false;

RepositoryItem 사용Grid 안에 ComboBox, Button, CheckBox 넣을 때 사용합니다.

  • 버튼 컬럼 예시
CODE
RepositoryItemButtonEdit btn = new RepositoryItemButtonEdit();
btn.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
btn.Buttons[0].Caption = "선택";

btn.ButtonClick += (s, e) =>
{
    int rowHandle = gridView1.FocusedRowHandle;
    var value = gridView1.GetRowCellValue(rowHandle, "ID");
    MessageBox.Show(value.ToString());
};

gridControl1.RepositoryItems.Add(btn);
gridView1.Columns["ButtonColumn"].ColumnEdit = btn;

LayoutControl 팁WinForms 기본 Panel, Label, TextBox 조합보다 LayoutControl을 쓰면 화면 정렬이 훨씬 편합니다.

CODE
layoutControl1.AllowCustomization = false;

사용자가 런타임에 레이아웃을 변경하지 못하게 막을 수 있습니다.

LookUpEdit 자주 쓰는 설정

CODE
lookUpEdit1.Properties.DataSource = dt;
lookUpEdit1.Properties.DisplayMember = "Name";
lookUpEdit1.Properties.ValueMember = "Code";
lookUpEdit1.Properties.NullText = "";
lookUpEdit1.Properties.ShowHeader = false;
  • 선택 값 가져오기
CODE
var code = lookUpEdit1.EditValue;

SplashScreenManager 사용조회 시간이 긴 작업에는 로딩창을 보여주는 게 좋습니다.

CODE
SplashScreenManager.ShowDefaultWaitForm("조회 중", "잠시만 기다려주세요...");
try
{
    // 오래 걸리는 작업
}
finally
{
    SplashScreenManager.CloseDefaultWaitForm();
}

UI 스레드 안전 처리백그라운드 작업 후 UI 변경 시:

CODE
this.Invoke(new Action(() =>
{
    gridControl1.DataSource = dt;
}));

또는 :

CODE
if (this.InvokeRequired)
{
    this.Invoke(new Action(() => gridControl1.DataSource = dt));
}
else
{
    gridControl1.DataSource = dt;
}

GridView 이벤트 추천자주 쓰는 이벤트:

  • 예: 특정 조건 행 색상 변경
CODE
gridView1.RowStyle += (s, e) =>
{
    if (e.RowHandle >= 0)
    {
        var status = gridView1.GetRowCellValue(e.RowHandle, "Status")?.ToString();

    if (status == "완료")
        {
            e.Appearance.BackColor = Color.LightGreen;
        }
    }
};

DevExpress 사용 시 주의점FocusedRowHandle은 항상 유효한 행이 아닐 수 있습니다.

CODE
if (gridView1.FocusedRowHandle < 0)
    return;

삭제, 그룹 행, 필터 행에서는 RowHandle이 음수일 수 있습니다. 값 가져올 때도 null 체크하세요.

CODE
var value = gridView1.GetRowCellValue(rowHandle, "ColumnName");
if (value == null || value == DBNull.Value)
    return;

추천 기본 세팅

CODE
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
gridView1.OptionsView.ColumnAutoWidth = false;
gridView1.OptionsView.ShowAutoFilterRow = true;

WinForms에서 DevExpress를 쓴다면 GridControl, LayoutControl, LookUpEdit, XtraMessageBox, SplashScreenManager 이 5개를 잘 쓰는 게 핵심입니다.

공유
S

SHIN

.NET 개발자입니다

GitHub
Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

이전 포스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

다음 포스트

Devexpress GridView 레이아웃 상태 저장 및 불러오기

Devexpress GridView 레이아웃 상태 저장 및 불러오기

같은 카테고리 포스트

클릭원스 업데이트 체크  (비동기)

클릭원스 업데이트 체크 (비동기)

2026년 5월 7일· 1분
Devexpress GridView 레이아웃 상태 저장 및 불러오기

Devexpress GridView 레이아웃 상태 저장 및 불러오기

2026년 5월 6일· 1분

댓글