데이터 테이블 - 다른코드, 동일상품

image

해당 이미지 처럼 코드가 달라도 상품이 동일한데 하나라도 처리필요가 존재할 경우

처리필요(동일상품)으로 수정하고 싶습니다.

for each 사용하여 변경하는 방법과

정규식을 사용하여 변경하는 방법 모두 질문드립니다.

말씀 주신 상황을 대략적으로 정리해보면 아래 단계로 구현해볼 수 있을 것 같습니다.

1.“처리필요(동일상품)” 써야 하는 상품목록 추출 → 위 상황에선 A,C만 뽑을 수 있어야 함
2.대상 상품 중에 SAP처리필요여부가 빈칸인 행 판단 → 위 상황에선 C는 처리할 행이 없음
3.추출된 각 행마다 SAP처리필요여부에 “처리필요(동일상품)” 입력

정규식이 IsMatch 액티비티 등에서 쓰는 그 Regex 말씀하시는 것은 아닌 것 같고 Datatcolumn.Expression 을 말씀하시는 것 같아 그걸 기준으로 간단하게 예제 소스를 구현해봤습니다.
동일상품.xaml (27.2 KB)

Foreach 쓰는 경우에는 상기 2,3번을 이중 For each로 묶어서 원본의 모든 행을 전부 하나씩 체킹하는 방식이 될 것 같습니다. 심플하지만 원본의 행 갯수가 매우 많은 경우에는 느릴 수도 있습니다.
예제에서는 2_1. 번 시퀀스 내용입니다.

DataColumn Expression을 써서 For each를 좀 덜 써보는 내용이 2_2.번 시퀀스 내용입니다.
위 상황을 기준으로는 상품명이 A, C인 행 중에 SAP처리필요여부가 빈칸인 행들만 별도의 데이터테이블로 뽑아서 Expression을 사용하여 "처리필요(동일상품)"을 일괄 입력하고, 그 결과를 다시 원본에 추가하는 방식으로 합칩니다. 합친 후에는 기존의 SAP처리필요여부가 비어있던 행은 삭제합니다.
그리고 모든 대상상품에 대해서 합치기가 완료되면 코드 순으로 재정렬합니다.

원본 DT 안에서 바로 특정 조건에 해당하는 열을 일괄입력하는 방법은 잘 모르겠네요.

안녕하세요. 답변 감사드립니다.
혹시 "상품"컬럼이 동일한데 SAP처리필요여부가 "처리필요"인 경우 작동하는 정규식을 알 수 있을까요??
AsEnumerable 함수를 이용하는 방법을 알고 싶습니다.

말씀하신 내용은 Linq 함수 이용해서 원하시는 대로 필터링 가능합니다.
Where함수의 인수로 필터조건을 쓰면 되는데 람다식?인가 그걸로 입력하시면 됩니다.

말씀주신 내용은 DataTable로 받는 경우 아래처럼 쓰시면 될 것 같습니다.

DT.AsEnumerable.Where(function(row) row(“SAP처리필요여부”).ToString=“처리필요”).CopyToDataTable

개인적으로는 단순히 필터링만 한 결과를 DataTable로 받을거면 대부분 Filter DataTable 액티비티 씁니다.
Linq는 혼자만 쓰면 괜찮은데 혹시 협업하거나 인수인계할 때 설명이 어려워져서…

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.