2016-07-13 3 views
1

나는 1000 데이터 요소를 포함하는 DataGridView를 가지고 있습니다. 내 DataGridView에서 값의 최소, 최대 및 평균을 성공적으로 계산했지만 지금은 특정 범위에서 min, max 및 average 값만 가져 오려고합니다. 예를 들어 101에서 200 또는 201에서 300 사이의 데이터입니다.Datagridview, 특정 범위에서 최소값, 최대 값 및 평균값을 얻는 방법

For i As Integer = 0 To dataGridView1.Rows.Count() - 1 Step +1 

    sum_tmp = sum_tmp + dataGridView1.Rows(i).Cells(2).Value 

    If i = 0 Then 
     max_tmp = dataGridView1.Rows(i).Cells(2).Value 
     min_tmp = dataGridView1.Rows(i).Cells(2).Value 
    End If 

    If max_tmp < dataGridView1.Rows(i).Cells(2).Value Then 
     max_tmp = dataGridView1.Rows(i).Cells(2).Value 
    End If 

    If min_tmp > dataGridView1.Rows(i).Cells(2).Value Then 
     min_tmp = dataGridView1.Rows(i).Cells(2).Value 
    End If 

Next 

avg_tmp = sum_tmp/dataGridView1.Rows.Count() 

위 코드는 값을 얻는 것입니다. 내가 정수 변수를 사용하여 콤보 상자를 선택하여 변경했지만 여전히 항상 최소 0 값을 얻으려고했습니다. 슬프게도 그것은 평균에 올바른 가치를 보여줍니다. 어떻게 잘못된 것일까 요?

+0

'Filter 함수 '를 사용하고'Between 메서드'를 사용하여'DataView'를 사용하여 값을 얻을 수 있습니까? DataTable.FIlter() Method' – MethodMan

+0

에서 Google 검색을 수행하면 합계 또는 평균을 계산 하시겠습니까? 사용자가 컨텍스트 메뉴 항목에서 일부 행과 클릭을 선택합니까? –

+0

@AlexB. 당신은 좋은 질문을 제기합니다. 두 개의 단일 값을 입력 (첫 번째 행, 마지막 행) – djv

답변

0

당신은 당신이 처리 할 값의 열거 수집을 얻을 수있는 LINQ 식을 사용할 수 있습니다 다음, 최대, 최소를 얻을 수 내장 함수를 사용하여 평균

는 결과를 개최 구조체를 정의 계산

Private Structure ResultsStruct 
    Public Min As Single 
    Public Max As Single 
    Public Average As Single 
    Public Sum As Single 
End Structure 

이 함수는 호출시 struct를 반환합니다. 첫 번째 행 인덱스와 마지막 행 인덱스를 전달하십시오. 그것은이 그리드 또는 입력의 다른 수단을 선택하는 사용자로부터인지, 관심있는 범위의 예에서 201300를 교체

Dim result = getResults(firstRow:=201, lastRow:=300) 
MessageBox.Show(String.Format("Max: {0}, Min: {1}, Avg: {2}, Sum: {3}", 
           result.Max, result.Min, result.Average, result.Sum)) 

을 불리는 방법

Private Function getResults(firstRow As Integer, lastRow As Integer) As ResultsStruct 
    Dim skipRows = firstRow - 1 
    Dim takeRows = lastRow - skipRows 
    Dim values = DataGridView1.Rows. 
     OfType(Of DataGridViewRow)(). 
     Select(Of Single)(Function(r) Single.Parse(r.Cells(0).Value.ToString())). 
     Skip(skipRows). 
     Take(takeRows) 
    Dim max = values.Max() 
    Dim min = values.Min() 
    Dim avg = values.Average() 
    Dim result As New ResultsStruct() With {.Max = values.Max(), 
              .Min = values.Min(), 
              .Average = values.Average(), 
              .Sum = values.Sum()} 
    Return result 
End Function 

.

+0

답변 주셔서 감사합니다, 지금은 내 "기본 지식"의 낮은 해결 방법 : 기능을 호출하는 방법을 간단하게 내 대답을 편집 : D 조 – Yon

관련 문제