문제

데이터세트에 바인딩된 데이터그리드가 있고 정수로 채워진 열의 바닥글에 평균 결과를 표시하려고 합니다.

제가 생각하는 방법은 2가지입니다.

1."이용하세요. 원천, 루크"
DataGrid.DataBind()를 호출하는 코드에서 DataTable.Compute() 메서드(또는 제 경우에는 DataSet.DataTable(0).Compute()).예를 들어:

Dim strAverage = DataTable.Compute("Avg(ColumnName)", "")  

하지만 일단 이것을 갖고 나면 바닥글에 어떻게 삽입할 수 있습니까?

2."경계 영광을 위해"
DataGrid.ItemDataBound 이벤트를 사용하고 모든 ListItemType.Item 및 ListItemType.AlternatingItem의 누계를 계산하여 최종적으로 ListItemType.Footer에 표시합니다.예를 들어:

Select Case e.Item.ItemType
    Case ListItemType.Item, ListItemType.AlternatingItem
        runningTotal += CInt(e.Item.Cells(2).Text)
    Case ListItemType.Footer
        e.Item.Cells(2).Text = runningTotal/DataGrid.Items.Count
End Select

이것은 잘못된 것 같습니다. 또한 모든 DataBind에서 runningTotal이 재설정되었는지 확인해야 합니다.

더 좋은 방법이 있나요?

도움이 되었습니까?

해결책

둘 중 하나가 반드시 더 나은지는 모르겠지만 두 개가 더 좋습니다. 번갈아 하는 방법은 다음과 같습니다

  1. 바닥글을 누른 후 수동으로 표를 실행하고 화면의 텍스트에서 계산합니다.
  2. 수동으로 데이터를 검색하고 바인딩과 별도로 계산을 수행합니다.

물론 #2는 데이터 바인딩의 장점을 상쇄합니다(이렇게 하고 있다고 가정).

다른 팁

감사해요 대니스머프, 귀하의 첫 번째 답변이 이해가 됐습니다.(왜 우리는 항상 그 마법의 해결책을 찾는 걸까요?).

참고로 제가 한 일은 다음과 같습니다.(경고:아래 VB에는 세미콜론이 충분하지 않을 수 있습니다.)

Case ListItemType.Footer
    e.Item.Cells(0).Text = "Average"
    For i As Integer = 3 To 8
        Dim runningTotal As Integer = 0
        For Each row As DataGridItem In DataGrid.Items
            If IsNumeric(row.Cells(i).Text) Then
                runningTotal += CInt(row.Cells(i).Text)
            End If
        Next
    e.Item.Cells(i).Text = Math.Round(runningTotal / DataGrid.Items.Count, 0)
    Next
End Select

나는 여러 열(따라서 3~8개)에 대해 이 작업을 수행해야 했고, 궁극적으로 내가 마법 같은 솔루션을 찾고 있었던 이유였습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top