שתף באמצעות


Looping through cells in DataGridView column

Question

Friday, August 15, 2008 3:13 AM

How do you loop through a name column in a DataGridView?  What is the collection?  The following below does not work.

For each X in DataGridView.Columns("Name")

Next

Thanks

EM

All replies (13)

Friday, August 15, 2008 8:15 AM ✅Answered

There's no ready made collection to be used. You will need to get the cell from each row, something like this;

 
        For Each row As DataGridViewRow In Me.DataGridView1.Rows  
            If (Not row.IsNewRow) Then 
                Dim cell As DataGridViewCell = row.Cells("Column1")  
 
                ' Do something with cell...  
            End If 
        Next 
 
 

Checking if the row is a new row is optional.

/Calle


- Still confused, but on a higher level -


Thursday, August 21, 2008 4:44 AM ✅Answered | 3 votes

ExcelMonkey said:

How do you loop through a name column in a DataGridView?  What is the collection?  The following below does not work.

For each X in DataGridView.Columns("Name")

Hi EM,

Calle's idea is good.

Besides, you can loop through cells in DataGridView via RowIndex and ColumnIndex.

        Dim rowIndex As Int32 = 0  

        Dim colIndex As Int32 = 0  

 

        'Loop through each cell in DataGridView column "Name" (Assuming it's the second column)  

        For rowIndex = 0 To DataGridView1.RowCount - 2 'Her "-2"(not "-1") is to skip the NewRow at the end.

            MessageBox.Show(DataGridView1.Rows(rowIndex).Cells("Name").Value.ToString)  

            ' or  

            MessageBox.Show(DataGridView1.Rows(rowIndex).Cells(1).Value.ToString) 'Note: Column Index is based on zero.  

        Next 

 

        'Loop through all cell in entire DataGridView  

        For rowIndex = 0 To DataGridView1.RowCount - 2  

            For colIndex = 0 To DataGridView1.ColumnCount - 1  

                MessageBox.Show(DataGridView1.Rows(rowIndex).Cells(colIndex).Value.ToString)  

            Next 

        Next 

Additionally, you can reference to specific cell in DataGridView control like this:

   DataGridView1.CurrentCell.Value

   DataGridView1(ColumnIndex, RowIndex).Value

   DataGridView1.Rows(RowIndex).Cells(ColumnIndex).Value

  DataGridView1.Rows(RowIndex).Cells("ColumnName").Value

Best regards,
Martin Xie


Friday, February 6, 2009 8:33 PM

Hi

Expanding feature more.  how would i compare a value in the datagridview to a textbox value.

for example,

in the datagridview therea are 3 columns (partid,partdes,qty) and in my textbox i have a text part called "SAUSAGE"

what i want to do is for the datagridview to go through column (0) - part id and look for the value called SAUSAGE.  IF existed, do something and if not msgbox (...).

is tis possible to do?

thanks,
Tom_tak


Monday, February 9, 2009 3:41 AM | 1 vote

takraw_ said:

Expanding feature more.  how would i compare a value in the datagridview to a textbox value.
for example,
in the datagridview therea are 3 columns (partid,partdes,qty) and in my textbox i have a text part called "SAUSAGE"
what i want to do is for the datagridview to go through column (0) - part id and look for the value called SAUSAGE.  IF existed, do something and if not msgbox (...).

Hi Tom_tak,

Here is code sample you desired. Please take it a try.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  

        Dim rowIndex As Int32 = 0  

        Dim idCellVal As String = "" 

        Dim isExist As Boolean = False 

 

        'Loop through each cell in DataGridView 1st column "partid"  

        For rowIndex = 0 To DataGridView1.RowCount - 2 'Her "-2"(not "-1") is to skip the NewRow at the end.   

            idCellVal = DataGridView1.Rows(rowIndex).Cells("partid").Value.ToString  

            If idCellVal = TextBox1.Text Then 

                isExist = True 'Once found,change to True   

                ' Do something  

            End If 

        Next 

 

        If isExist = False Then 'If still not found after Loop through entire 1st column  

            MessageBox.Show("Not Found!")  

        End If 

 

    End Sub 

Best regards,
Martin Xie


Tuesday, February 10, 2009 8:49 PM

Thank you so much for the reply.  this helps me a lot. 

i have one more questions:

let say i found the partid and it existed.  how to i deduct the qty from that cell.

i.e) |PART ID | PART DESC | QTY|
     
       FISH          FISH - G        10

how to i from the datagriview once we find the partid, how to i deduct the QTY column to make it 9. ...and so on (decrement) evertime i click on the bttn.

thanks so much for the help...

tom


Thursday, February 12, 2009 5:39 AM | 1 vote

takraw_ said:

let say i found the partid and it existed.  how to i deduct the qty from that cell.

i.e) |PART ID | PART DESC | QTY|
     
       FISH          FISH - G        10

how to i from the datagriview once we find the partid, how to i deduct the QTY column to make it 9. ...and so on (decrement) evertime i click on the bttn.

Public Class Form1  
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
        Dim rowIndex As Int32 = 0  
        Dim idCellVal As String = "" 
        Dim isExist As Boolean = False 
 
        'Loop through each cell in DataGridView 1st column "partid"     
        For rowIndex = 0 To DataGridView1.RowCount - 2 'Her "-2"(not "-1") is to skip the NewRow at the end.      
            idCellVal = DataGridView1.Rows(rowIndex).Cells("partid").Value.ToString  
            If idCellVal = TextBox1.Text Then 
                DataGridView1.Rows(rowIndex).Cells("QTY").Value = Val(DataGridView1.Rows(rowIndex).Cells("QTY").Value) - 1 ' Decrement  
                isExist = True 'Once found,change to True      
                ' Do something     
            End If 
        Next 
 
        If isExist = False Then 'If still not found after Loop through entire 1st column     
            MessageBox.Show("Not Found!")  
        End If 
 
    End Sub 
 
End Class 

Thursday, February 12, 2009 2:00 PM

thanks Again.

i ran into one problem:  when decrement the qty to 0.  once it hit 0 how do i remove that row?

I.e): |part id | Part Des | Qty|
         
        FISH        FISH - G    10
        SHRIMP   SHRIMP-G  1

when shrimp decrement after one loop it will become "0", when it become "0" how do i remove the row SHRIMP from the dgv?

thanks
tom


Friday, February 13, 2009 6:03 AM | 1 vote

takraw_ said:

i ran into one problem:  when decrement the qty to 0.  once it hit 0 how do i remove that row?

I.e): |part id | Part Des | Qty|
         
        FISH        FISH - G    10
        SHRIMP   SHRIMP-G  1

when shrimp decrement after one loop it will become "0", when it become "0" how do i remove the row SHRIMP from the dgv?

Here is code sample:

 

Public Class Form1  

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  

        Dim rowIndex As Int32 = 0  

        Dim idCellVal As String = "" 

        Dim isExist As Boolean = False 

 

        'Loop through each cell in DataGridView 1st column "partid"        

        For rowIndex = 0 To DataGridView1.RowCount - 2 'Her "-2"(not "-1") is to skip the NewRow at the end.         

            idCellVal = DataGridView1.Rows(rowIndex).Cells("partid").Value.ToString  

            If idCellVal = TextBox1.Text Then 

                isExist = True 'Once found,change to True             

 

                If Val(DataGridView1.Rows(rowIndex).Cells("QTY").Value) <= 0 Then 

                    DataGridView1.Rows.RemoveAt(rowIndex)  

                Else 

                    DataGridView1.Rows(rowIndex).Cells("QTY").Value = Val(DataGridView1.Rows(rowIndex).Cells("QTY").Value) - 1 ' Decrement     

                End If 

 

            End If 

        Next 

 

        If isExist = False Then 'If still not found after Loop through entire 1st column        

            MessageBox.Show("Not Found!")  

        End If 

 

    End Sub 

 

End Class 


Friday, February 13, 2009 1:35 PM

 thank You Martin,

when insert that code and running it i get this errors - i.  but i don't know how to go by fixing this. 

here what is the error i am getting:(*Red is the error i'm getting)

idCellVal = dgsalesorder.Rows(rowindex).cells("ID").value.tostring     -> Null ReferenceException was unhandled.  
                                                                                                                  Object reference not set to an instance of an object.

here is my code:
for rowindex = 0 to dgsalesorder.rowcount - 2
idCellVal = dgSalesOrder.Row(rowindex).Cells("ID").value.tostring
if idcellval=partid.text then
isExist = true

If Val(dgsalesorder.Rows(rowIndex).Cells("QTY").Value) <= 0 Then 
          
         dgsalesorder.Rows.RemoveAt(rowIndex)  
               Else 
            dgsalesorder.Rows(rowIndex).Cells("QTY").Value = Val(dgsalesorder.Rows(rowIndex).Cells("QTY").Value) -1 ' Decrement     
                End If 
 
            End If 
        Next 
 
        If isExist = False Then 'If still not found after Loop through entire 1st column        
            MessageBox.Show("Not Found!")  
        End If 
 

thanks,
tom

Monday, February 16, 2009 10:59 AM

takraw_ said:

idCellVal = dgsalesorder.Rows(rowindex).cells("ID").value.tostring     -> Null ReferenceException was unhandled.  
                                                                                                                  Object reference not set to an instance of an object.

Hi Tom,

Do you debug your code and figure out this issue?

Please make sure that your DataGridView dgsalesorder contains a column named ID.

You can consider sending your project (zip package) to me for investigation the issue. v-maxie@microsoft.com


Wednesday, March 25, 2009 7:29 PM

Hi Martin,

thanks for all your help.  I finally found my problem.

now i ran into another problem. 

when values are popluate in the datagridview.   if there are some empty or blank values in one of the the columns.  let say the Part ID column. 

how to we remove the blank part id from teh datagridview when it gets loaded?

thanks for you help

Tom


Sunday, July 31, 2011 12:48 PM

Hi Martin,

 

Thank you for this code from 2008. It really helps me.

Then I tried adding a loop inside this loop but continue to get the error "Null reference exception was unhandled" before the loop ends. 

 For rowIndex = 0 To dgvVisit.RowCount - 2 
      MessageBox.Show(dgvVisit.Rows(rowIndex).Cells("CoPayCharge").Value.ToString)

      For rowIndex1 = 0 To dgvPayment.RowCount - 2 
        MessageBox.Show(dgvPayment.Rows(rowIndex).Cells("CoPayPaid").Value.ToString)
      Next
     
    Next

My code is included.

 

Can you help please?

Kind regards, 

Mike


Friday, July 15, 2016 1:03 PM

Hey,

If I am not wrong it is

For rowIndex = 0 To DataGridView1.RowCount - 1  
            For colIndex = 0 To DataGridView1.ColumnCount - 1  
                MessageBox.Show(DataGridView1.Rows(rowIndex).Cells(colIndex).Value.ToString)  
            Next 
        Next