왕초보자 Winform Grid Cell 하나씩 하나씩 추가 후 행 추가 질문 드립니다....

안녕하세요.
아주 아주 초보자 입니다.

현재 Winform 프로그램 하나 만들고 있는데 궁금한게 있어서 질문 드립니다.

WinForm 화면에서 바코드 스캔시 바코드 1개에 Cell값 1개를 넣고 약 Cell값 5개 정도 들어갔을때
Row.Add()를 진행하려고 합니다…
근데 Cell값이 총 5개중에 3개일때 Row.Add 4개일때 Row.Add 할수도 있는데 조건을 어떻게 추가 해야할까요?

고수님들 이해 초보자말 어려우시겠지만 양해부탁드립니다.

소스 주요 항목 추가 합니다…고수님들 제발 부탁드립니다 ㅠㅠ

    private void txtScan_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (dgvOrderSub.SelectedRows.Count != 0 || dgvOrder.SelectedRows.Count != 0)
        {
            // 소문자 대문자로 변환
            txtScan.Text = txtScan.Text.ToUpper();

            string itemcode = dgvOrderSub.SelectedRows[0].Cells[2].Value.ToString();

            string Pallet = string.Empty;
            string Box = string.Empty;
            string prod = string.Empty;

            DataTable dt = null;

            if (dt == null)
            {
                dt = new DataTable();

                foreach (DataGridViewColumn col in dgvWait.Columns)
                {
                    dt.Columns.Add(col.DataPropertyName);
                }

                dgvWait.DataSource = dt;
            }

            dt = dgvWait.DataSource as DataTable;

            DataRow dr = null;
            
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                Stopwatch stopWatch = new Stopwatch();
                stopWatch.Start();

                e.Handled = true;

                string barcode = txtScan.Text.Trim();

                MessageBox.Show(txtScan.Text.Substring(0, 2).ToString());
                dr = dt.NewRow();
                if (rdPallet.Checked == true)
                {
                    if (txtScan.Text.Substring(3, 2) == "IP" || txtScan.Text.Substring(3, 2) == "OP")
                    {

                        txtPallet.Text = "";
                        txtPallet.Text = txtScan.Text.ToString();
                        txtScan.Text = "";

                        dr[WMS_In_InWareSub.PALLEETID] = txtPallet.Text.ToString();

                    }
                    else
                    {
                        MessageBox.Show("라벨 종류 선택 또는 팔레트 QRCODE 확인 해주시기 바랍니다.", "팔레트 라벨 인식");
                        return;
                    }
                }
                else if (rdBoxID.Checked == true)
                {
                    if (txtScan.Text.Substring(3, 2) == "IB" || txtScan.Text.Substring(3, 2) == "OB" || txtScan.Text.Substring(0, 2) == "OB")
                    {
                        txtBox.Text = "";
                        txtBox.Text = txtScan.Text.ToString();
                        txtScan.Text = "";

                        dr[WMS_In_InWareSub.BOXID] = txtBox.Text.ToString();

                    }
                    else
                    {
                        MessageBox.Show("라벨 종류 선택 또는 박스 QRCODE 확인 해주시기 바랍니다.", "박스 라벨 인식");
                        return;
                    }
                }
                else if (rdProdID.Checked == true)
                {
                    txtProd.Text = "";
                    txtProd.Text = txtScan.Text.ToString();
                    txtScan.Text = "";

                    dr[WMS_In_InWareSub.PRODID] = txtProd.Text.ToString();

                }
                else
                {
                    MessageBox.Show("QRCODE 스캔할 라벨 정보를 선택 해주세요.", "라벨 정보 선택");
                    return;
                }

                dr[Resources.Check] = false;
                dr[WMS_In_InWareSub.PALLEETID] = txtPallet.Text.ToString();
                dr[WMS_In_InWareSub.BOXID] = txtBox.Text.ToString();
                dr[WMS_In_InWareSub.PRODID] = txtProd.Text.ToString();
                dr[WMS_In_InWare.WAITQTY] = "";
                dr[WMS_In_InWareSub.ITEMCODE] = "";
                dr[com_ItemMaster.ITEMNAME] = "";
                dr[com_ItemMaster.SPEC] = "";
                dr[WMS_In_InWare.INWAREORDERID] = dgvOrderSub.SelectedRows[0].Cells[0].Value.ToString();
                dr[WMS_In_InWareSub.INWAREORDERIDSEQ] = dgvOrderSub.SelectedRows[0].Cells[1].Value.ToString();
                dr[WMS_In_InWareSub.INWAREID] = "";
                dr[WMS_In_InWareSub.INWAREIDSEQ] = "";
                dr[WMS_In_InWareSub.CREATEDATE] = Globals.Settings.GetString(Resources.PersonID);
                dr["Name"] = "";
                //dt.Rows.Add(dr);
            }
            // 라벨 정보가 전부다 없느냐..
            // 아니면 팔레트, 박스 라벨이 망가져서 팔레트 박스만 다시 뽑는거냐..
            // 박스 라벨 망가진거에 부품 QR까지 있으면 다 찍어야한다..
        }
        else 
        {
            MessageBox.Show("라벨 정보 스캔 전 지시 조회 또는 발행하려는 품목을 선택해주세요.", "라벨 발행 전 확인");
            return;
        }


    }
3개의 좋아요

이 말이 이해가 안됩니다. 이미 Row가 4개이고 Cell이 3개인데 특정 조건에 Row를 추가할 수도 있다 말인가요?

이 조건의 예외 조건인가요?

2개의 좋아요

아아 네 ㅠㅠ 제가 글을 잘못썻습니다… Row 1개 집어넣을때 Cell 값이 1개 ~ 5개 무작위 입니다…근데 그 Cell 값을 스캐너로 바코드 스캔했을때 1개씩 집어 넣어야 합니다

2개의 좋아요

소스코드 상의 주석으로 이해해보고자 합니다.

// 라벨 정보가 전부다 없느냐..
// 아니면 팔레트, 박스 라벨이 망가져서 팔레트 박스만 다시 뽑는거냐..
// 박스 라벨 망가진거에 부품 QR까지 있으면 다 찍어야한다..

식별 대상은 다음으로 보입니다.

  • 팔레트에 박스가, 박스에 부품이 담깁니다 : 예) A팔레트 (A-1 박스(A-1-1 부품), A-2 박스, …)
  • 팔레트, 박스, 부품을 식별해야 합니다.
  • 팔레트는 박스 x n을 담습니다.
  • 박스에는 부품 x n을 담습니다.

확인 조건은 다음으로 보입니다.

  • 팔레트를 체크하는가?
  • 박스를 체크하는가?
  • 부품을 체크하는가?

확인 조건은 코드로 보았을 때 화면상에서 선택해야 하는 것으로 보입니다. 체크는 코드상으로는 중복 체크할 수 없도록 되어 있고 팔레트 → 박스 → 부품 순입니다.

이런식으로 유추할 수는 있는데 정확한 프로세스를 알려주셔야 정확한 답을 드릴 수 있을 것 같습니다.

Cell의 입력된 값의 개수 또는 완성(마지막 입력)에 따라 Cell 이 "완성되느냐?"의 조건이 반드시 있을텐데 질문 글과 소스코드만 봤을 때는 알 수 없습니다.

3개의 좋아요

조금 더 추측을 해보자면,

  • 팔레트를 체크한 경우 → 팔레트의 상자 및 부품이 모두 정상인 경우로 팔레트만 바코드 인식 후 Row.Add

  • 상자를 체크한 경우 →

  1. 상자가 어떤 팔레트의 상자인지 먼저 팔레트 인식
  2. 팔레트 정보가 입력되어 있으면 그다음 상자 인식, Row.Add
  3. 추가로 상자를 인식해야 할 경우 1)에서 입력된 팔레트 정보는 계속 남아 상자를 계속해서 인식 시 바로 1)에서 입력한 팔레트 정보를 같이 삽입하면서 상자 정보 삽입 후 Row.Add
  • 부품을 체크한 경우 →
  1. 팔레트가 아직 입력되지 않았으면 팔레트 인식
  2. 상자가 아직 입력되지 않았으면 상자 인식
  3. 부품을 인식 후 Row.Add
  4. 추가 부품이 있을 경우 1) 및 2) 입력 정보를 활용해서 새로 인식하는 부품을 삽입할 때 1), 2), 3)의 정보 삽입, Row.Add
4개의 좋아요

Row : 박스바코드 혹은 팔레트
Cell : 제품 혹은 박스

지금 잔량처리가 문제인거죠?? 다 담지않아도 되는거 보면 납품용이 아닌 내부용같은데 작업자가 저것도 선택하기가 귀찮으니 알아서 식별바코드를 출력해달라고 하는거 같은데… 적용할 수 있는 방법이 바코드를 이용해서 생산일자 LOT를 구별을 하는겁니다. 동일한 LOT는 계속 담아서 5개 적재시 행추가 로직을 타다가 다른 LOT를 만나면 바로 행추가 로직을 타게 하면 됩니다.
이걸 적용해 줄테니 생산팀에 니네들 일자별 LOT 혼입안되게 할수 있겠냐 물어보세요. 열이면 열 장담못한다고 합니다. 그럼 수기로 적재를 구별해야 한다고 하시면 됩니다. 시스템구현은 한계가 있어요.

2개의 좋아요