본문 바로가기
C#&Dev

Sorting된 GridView의 setValue

by 구엽하늘 2024. 4. 30.
728x90

/// <summary>
/// Grid Button 클릭
/// </summary>
private void MglButtonEdit_Click(object sender, EventArgs e)
{
    double reqQty = 0;
    double reqStddQty = 0;

    MData vo_resultDataDtl = this.gvDetl.getSelectedRows();  // TODO FOCUSEDROW로 하지 않은 이유?

    switch (MepsHelper.checkNull(((ButtonEdit)sender).Properties.Tag))
    {
        case "plus":
            reqQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqQty"));
            reqStddQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqStddQty"));//청구기준수량
            reqQty = (reqQty + reqStddQty); // TODO 배수처리해야 할 듯?
            break;

        case "minus":
            reqQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqQty"));
            reqStddQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqStddQty"));//청구기준수량
            reqQty = (reqQty - reqStddQty);
            if (reqQty < reqStddQty)
                reqQty = 0;
            break;

        default:
            return;
    }

    int rowPos = this.gvDetl.FocusedRowHandle;
    this.gvDetl.setRowCellValue(rowPos, "reqQty", reqQty);
    this.gvDetl.setRowCellValue(rowPos, "reqQty", reqQty);   // TEST를 위해 한번 더 실행
}

 


예제는 [+][-] 버튼을 클릭시 (청구)수량을 SET하는 기능이다.


 

그리드가 SORTING되지 않은 상황에서는 정상 작동한다.


수량을 SORTING한 경우 발생한 오류 상황이다.

첫 setValue에서 No.1의 청구수량을 SET하고, SORT되면서 No.1의 행은 제일 아래로 이동된다.

다음 setValue에서 No.1의 청구수량이 아닌, No.2의 청구수량에 SET되면서, No.2 행도 제일 아래로 이동된다.

그리고 공통로직에서 행의 상태를 No.3의 행에 설정한다.


GridView에 SetValue하는 것을 DataTable에 setValue하는 것으로 바꾸기로 결정되었다.
(파스칼 FunctionName은 Dev에서 제공하는 함수이고, 카멜 FunctionName은 회사내부 함수(userFunc)이다.)

 

/// <summary>
/// Grid Button 클릭
/// </summary>
private void MglButtonEdit_Click(object sender, EventArgs e)
{
    double reqQty = 0;
    double reqStddQty = 0;

    MData vo_resultDataDtl = this.gvDetl.getSelectedRows();  // TODO FOCUSEDROW로 하지 않은 이유?

    switch (MepsHelper.checkNull(((ButtonEdit)sender).Properties.Tag))
    {
        case "plus":
            reqQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqQty"));
            reqStddQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqStddQty"));//청구기준수량
            reqQty = (reqQty + reqStddQty); // TODO 배수처리해야 할 듯?
            break;

        case "minus":
            reqQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqQty"));
            reqStddQty = MepsHelper.checkNullDouble(vo_resultDataDtl.getString("reqStddQty"));//청구기준수량
            reqQty = (reqQty - reqStddQty);
            if (reqQty < reqStddQty)
                reqQty = 0;
            break;

        default:
            return;
    }

    /*
    int rowPos = this.gvDetl.FocusedRowHandle;
    this.gvDetl.setRowCellValue(rowPos, "reqQty", reqQty);
    this.gvDetl.setRowCellValue(rowPos, "reqQty", reqQty);   // TEST를 위해 한번 더 실행
    */

    int rowIdx = this.gvDetl.GetFocusedDataSourceRowIndex();
    this.gvDetl.setValue(rowIdx, "reqQty", reqQty);
    this.gvDetl.setValue(rowIdx, "reqQty", reqQty);
}

 


입력 전   입력 후
No dataIndex rowHandle   No dataIndex rowHandle
1 1 1   3 3 1
2 2 2   4 4 2
3 3 3   5 5 3
4 4 4   6 6 4
5 5 5   7 7 5
6 6 6   8 8 6
7 7 7   9 9 7
8 8 8   10 10 8
9 9 9   11 11 9
10 10 10   1 1 10
11 11 11   2 2 11

 

'C#&Dev' 카테고리의 다른 글

개발 시작 전 작업정리  (1) 2024.05.24
이 창을 닫으시겠습니까?  (0) 2024.05.17
GridView 문자열의 숫자정렬  (0) 2024.04.25
DateEdit Binding  (0) 2024.04.05
DataTable Filter  (0) 2024.03.14