LARC
LARC

Reputation: 119

MAX & MIN Value on GridView Column VB.NET

I am developing a small program to get the maximum of a specific column in a gridview (DevExpress), but I could not execute it as I wanted.

Can you support me in seeing where I have the error?

    Dim cells() As GridCell = GridView2.GetSelectedCells()
    Dim values As New List(Of Decimal)()
    For i As Integer = 0 To GridView2.RowCount - 1
        Dim value As Decimal = Convert.ToDecimal(GridView2.GetRowCellValue(cells(i).RowHandle, cells(i).Column))
        values.Add(value)
    Next i
    values.Sort()

    MsgBox(values.Max().ToString())

Regards.

Upvotes: 0

Views: 1528

Answers (2)

NajiMakhoul
NajiMakhoul

Reputation: 1716

Calculate Total Summary for Grid Column

gridView1.Columns("UnitsInStock").Summary.Add(DevExpress.Data.SummaryItemType.Average, "UnitsInStock", "Avg={0:n2}")
gridView1.Columns("UnitsInStock").Summary.Add(DevExpress.Data.SummaryItemType.Sum, "UnitsInStock", "Sum={0}")
Dim item As GridColumnSummaryItem = New GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Max, "UnitsInStock", "Max={0}")
gridView1.Columns("UnitsInStock").Summary.Add(item)

enter image description here

Devexpress Documentation:

https://documentation.devexpress.com/WindowsForms/DevExpress.XtraGrid.Columns.GridColumn.Summary.property

https://documentation.devexpress.com/WindowsForms/9677/Controls-and-Libraries/Data-Grid/Examples/Summaries/How-to-Calculate-Single-Total-Summary-for-Grid-s-Column

Upvotes: 1

Mary
Mary

Reputation: 15091

With the built in DataGridView, the number of rows can be Rows.Count -2 because there is an extra row for the user to enter a new record. I have no idea if DevExpress works that way but it is worth a try.

For i As Integer = 0 To GridView2.RowCount - 2

If your GridView uses a DataTable as a DataSource, then the following code might help. If the DataTable is still available then just start with that. Otherwise extract it from the grid.

DataTable does not implement IEnumerable but there is an extension method to get the interface (.AsEnumerable).

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt = DirectCast(DataGridView1.DataSource, DataTable)
    Dim maxValue = Aggregate r In dt.AsEnumerable
                   Into MaxID = Max(r("ID"))   '"ID" is the name of a column
    MessageBox.Show(maxValue.ToString)
End Sub

Same thing for Min just change Max to Min.

Upvotes: 1

Related Questions