본문 바로가기

C#

C# - PDA 프로그램 개발 DataGridView 정렬과 row 이동하기 (DataTable, DataView 사용)

반응형

 

선과 작업 리스트를 확인할 수 있는 데이터 그리드 뷰를 윈폼에  띄웠다. 

해당 농가의 접수 번호가 포함된 QR코드를 PDA를 통해 스캐닝하여

ERP 시스템 상에서도 작업 시작 예정인 농가가 그리드 최상단에 위치 할 수 있도록

프로그램을 개발 하였다. 

이와 같은 프로그래밍을 통해 업 다운 버튼의 필요성을 없에 UI이를 더욱 깔끔하게 개선할 수 있다.

 

UI는 데모 버전으로 만든거라 못생겨도 이해 부탁드립니다. 

 

중점을 둔 것은 바코드 리딩을 하면 해당 접수 번호를 가진 농가의 데이터로우가 

최상단에 올라 올 수 있게 만들었다 .

 

 

예외 사항들을 조건문을 통해 리턴해주고 

바코드 스캐닝을 통해 읽어들인 작업 번호와

현재 그리드에서 최상단에 위치한 작업 번호를 스트링 변수에 담아 준다.

담은 두 작업 번호를 비교하여 동일 하지 않다면 

동일한 작업 번호를 가진 Column과 Row를 찾는 여정을 떠난다.

여기서는 컬럼의 인덱스도 for문과 if문을 통해 찾았지만 

고정된 컬럼을 사용하면 굳이 반복문과 조건문을 사용할 필요가 없다. 

그리고 해당되는 로우의 정보를 복사하여  찾아낸 기존 로우는 지우고 

최 상단으로 가는 InsertAt(newrow,0)을 입력해주면 된다. 

개발 영상.mp4
2.35MB

private void textBox_bar_KeyDown(object sender, KeyEventArgs e)
        {
            //enter값이 아니면 no / pda 스캐닝은 자동으로 enter역할 함
            if (e.KeyData != Keys.Enter)
                return;

            string ordCD = this.textBox_bar.Text.Trim();
            //작업번호가 없으면 no
            if (ordCD.Equals(""))
                return;

            this.SetGrid();

            DataTable dt = this.Grid_List.DataSource as DataTable;
            //row가 하나도 없으면 작업 no
            if (dt.Rows.Count < 1)
                return;

            string gridOrdCd = Convert.ToString(this.Grid_List[0, 1]).Trim();
        
            //바코드 스캐닝 넘버와 최상단 작업 번호가 다르면 
            //해당 번호가 있는 row를 찾아내는 로직
            if (ordCD != gridOrdCd)
            {
                int iColidx = -1;
                int iRowidx = -1;

                for (int i = 0; i < Grid_List.ColumnCount; i++)
                {
                    if (Grid_List.Columns[i].Name == "접수")
                    {
                        iColidx = i;
                        break;
                    }
                }
                for (int i = 0; i < Grid_List.RowCount - 1; i++)
                {
                    if (Grid_List.Rows[i].Cells[1].Value.ToString() == ordCD)
                    {
                        iRowidx = i;
                        break;
                    }
                }
                //찾아내서 (2,1)
                //맨 위면 종료
             
                //irowidx =3 3번째 row 를 새로운 로우에 복사
                DataRow row = dt.Rows[iRowidx];
                DataRow newrow = dt.NewRow();
                newrow.ItemArray = row.ItemArray;
                //선택된 로우의 
                dt.Rows.RemoveAt(iRowidx);

                dt.Rows.InsertAt(newrow, 0);


                dt.AcceptChanges();

                this.SaveOrdNo(dt);

                //this.Grid_List.CurrentCell = Grid_List[iColidx, 0]; 

                DataTable dtsort = dt.DefaultView.ToTable();


            }

            this.StartOrd(ordCD);

            this.SetGrid();

            this.Txt_BarClear();

            this.Txt_BarFocus();

        }

 

freeprog.tistory.com/413

 

C# -- DataGridView 정렬과 row 이동하기 (DataTable, DataView 사용)

C# -- DataGridView 정렬과 row 이동하기  ( DataTable 과 연결된 DataGridView 정렬하기 ) 소스 ; < 기본 전제 조건 > - 정렬시에는 row 이동막음 왜냐면, row 이동은 원본 data 순서를 이동시키는 목적임..

freeprog.tistory.com

해당 블로그를 많이 참고 하였다.

반응형