본문 바로가기
C#

C# DataGridView, DataView, List, Datatable를 이용하여 Grid에 데이터 표시하고 간단한 필터 기능 추가하기

by 따봉이 2021. 12. 21.
728x90
반응형

오늘은 테이블 형태의 데이터를 불러와서 DataGridView에 뿌리는 작업을 해보도록 하겠습니다. 

간단한 핵심만 찝에서 Simple하게 코딩했으니 가볍게 보시고 이해하시면 됩니다. 

 

 

아래 원본데이터(엑셀, DB, List, 배열등 )를 가져와서 Datatable에 넣고 DataView를 통해서 Grid에 뿌려주도록 해보겠습니다. 위의 데이터는 List 형태로 생성해서 진행하겠습니다.

반응형

원본데이터

 

 

먼저 Form한개를 생성하고 그 위에 DataGridView와 TextBox, 버튼 하나를 생성합니다. 

 

그리고 원본데이터를 Dictionary 형태로 담고 이것을 Datatable로 옮겨보겠습니다. 

    public partial class Form1 : Form
    {
        //Dictionary 형태의 원본 데이터 , 엑셀, DB에서 가져오는 데이터가 될 수도있다. 
        Dictionary<string, int> People = new Dictionary<string, int>();

        //원본 데이터를 담을 테이블
        DataTable dtPeople = new DataTable();

        //필터 기능을 위해 중간 역할하는 객체
        DataView dvPeople = new DataView();

        public Form1()
        {
            InitializeComponent();

            //원본데이터 생성
            People.Add("홍길동", 20);
            People.Add("임꺽정", 19);
            People.Add("흥부", 65);
            People.Add("놀부", 40);

            //Datable의 컬럼 생성, 이름은 문자니까 string, 나이는 숫자로 int로 생성
            dtPeople.Columns.Add("이름", typeof(string));
            dtPeople.Columns.Add("나이", typeof(int));

        }
      }

 

 

 

그리고 입력창에 "홍길동"을 입력하고 찾기를 누르면 

홍길동, 임꺽정, 흥부, 놀부 중에 홍길동의 데이터만 찾아서 Grid에 뿌려준다. 

 

private void button1_Click(object sender, EventArgs e)
        {
            //원본데이터를 Datable에 넣는다.
            foreach (var p in People)
            {
                DataRow row = dtPeople.NewRow();
                row["이름"] = p.Key;
                row["나이"] = p.Value;
                dtPeople.Rows.Add(row);
            }

            //입력한 검색할 이름
            string strSearchName = textBox1.Text;

            //데이터테이블의 데이터 중 지정한 이름의 데이터만 가져와서 Dataview에 담는다.
            dvPeople = new DataView(dtPeople, "이름 = '" + strSearchName + "'","나이 DESC",DataViewRowState.CurrentRows);

            //화면에 보여줄 Data만 있는 Dataview를 Grid에 연결한다. 
            dataGridView1.DataSource = dvPeople;

        }

 

 

결과화면

 

New DataView를 생성하는 과정에서 이것 저것 응용하면 데이터를 컨트롤 하기가 훨씬 쉬워질 것이다. 

728x90
반응형

댓글