[C# DevExpress] DevExpress(데브익스프레스) GridControl에서 ComboBox(콤보박스) 추


안녕하세요.

 

오늘은 C# DevExpress에서 GridControl을 다뤄보려고 합니다.

 

그 중에서도, 특정 컬럼을 콤보박스로 만드는 방법에 대해서 알아 보려고 합니다.

 

먼저, 윈폼 프로젝트를 생성해 주시고 아래와 같이 컨트롤을 배치해 주시기 바랍니다.



윈폼 프로젝트 생성 및 컨트롤 배치



위와 같이 GridControlSimpleButton 컨트롤 2개를 배치해 주시기 바랍니다.

 

저는 예제로 Nme, Age, Grade, Score 4개의 컬럼을 선언하여 값을 넣으려고 하는데요. 이 중에서 3번째 컬럼인 Grade 컬럼은 콤보박스로 만들어 보도록 하겠습니다.


예제 코드


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

using DevExpress.XtraEditors.Repository;

using DevExpress.XtraGrid.Views.Grid;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace DevTest

{

    public partial class Form1 : DevExpress.XtraEditors.XtraForm

    {

        //콤보박스 객체 선언

        private RepositoryItemComboBox gradeComboBox;

        public Form1()

        {

            InitializeComponent();

 

            // Shown 이벤트 선언

            this.Shown += DevForm_Shown;

 

            this.uiBtn_Add.Click += UiBtn_Add_Click;

            this.uiBtn_Delete.Click += UiBtn_Delete_Click;

        }

 

        /// <summary>

        /// 폼이 보여질 일어나는 이벤트 핸들러

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void DevForm_Shown(object sender, EventArgs e)

        {

            //GridControl 초기화

            InitGridControl();

 

            //DataTable 데이터 저장  바인딩

            this.uiGrid_Main.DataSource = GetData();

 

            //콤보박스 선언

            this.gradeComboBox = new RepositoryItemComboBox();

            this.gridView1.Columns[2].ColumnEdit = this.gradeComboBox;

            InitializeComboBoxEdit();

        }

 

        /// <summary>

        /// GridView 초기화

        /// </summary>

        public void InitGridControl()

        {

            GridView gv = this.uiGrid_Main.MainView as GridView;

            gv.OptionsView.ShowGroupPanel = false;

            gv.OptionsBehavior.Editable = true;

        }

 

        public DataTable GetData()

        {

            DataTable dt = new DataTable();

            dt.Columns.Add("Name");

            dt.Columns.Add("Age");

            dt.Columns.Add("Grade");

            dt.Columns.Add("Score");

 

            dt.Rows.Add(new string[] { "범범조조""28""2""100" });

            dt.Rows.Add(new string[] { "황선홍""56""3""10" });

            dt.Rows.Add(new string[] { "안정환""34""2""78" });

            dt.Rows.Add(new string[] { "설기현""33""1""54" });

            dt.Rows.Add(new string[] { "아이유""28""1""45" });

            dt.Rows.Add(new string[] { "박지성""23""4""10" });

 

            return dt;

        }

 

        /// <summary>

        ///  추가 버튼 클릭 이벤트 핸들러

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void UiBtn_Add_Click(object sender, EventArgs e)

        {

            gridView1.AddNewRow();

        }

 

        /// <summary>

        ///  삭제 버튼 클릭 이벤트 핸들러

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void UiBtn_Delete_Click(object sender, EventArgs e)

        {

            gridView1.DeleteRow(gridView1.FocusedRowHandle);

        }

 

        private void InitializeComboBoxEdit()

        {

            DevExpressHelper.ClearComboBoxEditData(this.gradeComboBox);

            DevExpressHelper.SetComboBoxEditData(this.gradeComboBox, "1""2""3""4"); 

            this.gridView1.SetRowCellValue(this.gridView1.FocusedRowHandle, "Grade", gradeComboBox.Items[0]);

            this.gradeComboBox.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;

        }

 

    }

 

    public class DevExpressHelper

    {

        public static void ClearComboBoxEditData(RepositoryItemComboBox sourceControl)

        {

            sourceControl.Items.Clear();

        }

 

        public static void SetComboBoxEditData(RepositoryItemComboBox sourceControl,

 params string[] itemValueArray)

        {

            foreach (string itemValue in itemValueArray)

            {

                sourceControl.Items.Add(itemValue);

            }

        }

    }

}

 

Colored by Color Scripter

cs


실행 결과




위와 같이 3번째 컬럼인 “Grade” 컬럼만 콤보박스로 만들어 진 것을 확인하실 수 있습니다.

 

위에 예제 코드를 조금만 변경하면, Name, Age, Score 컬럼 모두 콤보박스로 변경 가능하니 그건 한번 직접 연습해 보시는 것을 추천드립니다.

 

감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY