DataGridViewCellValueEventArgs.ColumnIndex Property        
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets a value indicating the column index of the cell that the event occurs for.
public:
 property int ColumnIndex { int get(); };
	public int ColumnIndex { get; }
	member this.ColumnIndex : int
	Public ReadOnly Property ColumnIndex As Integer
	Property Value
The index of the column containing the cell that the event occurs for.
Examples
The following code example demonstrates how to use the ColumnIndex property to retrieve cell values from the data store. This example is part of a larger example provided in How to: Implement Virtual Mode in the Windows Forms DataGridView Control.
void dataGridView1_CellValueNeeded( Object^ /*sender*/,
    System::Windows::Forms::DataGridViewCellValueEventArgs^ e )
{
   Customer^ customerTmp = nullptr;
   
   // Store a reference to the Customer object for the row being painted.
   if ( e->RowIndex == rowInEdit )
   {
      customerTmp = this->customerInEdit;
   }
   else
   {
      customerTmp = dynamic_cast<Customer^>(this->customers[ e->RowIndex ]);
   }
   
   // Set the cell value to paint using the Customer object retrieved.
   int switchcase = 0;
   if ( (this->dataGridView1->Columns[ e->ColumnIndex ]->Name)->Equals( L"Company Name" ) )
         switchcase = 1;
   else
   if ( (this->dataGridView1->Columns[ e->ColumnIndex ]->Name)->Equals( L"Contact Name" ) )
         switchcase = 2;
   switch ( switchcase )
   {
      case 1:
         e->Value = customerTmp->CompanyName;
         break;
      case 2:
         e->Value = customerTmp->ContactName;
         break;
   }
}
private void dataGridView1_CellValueNeeded(object sender,
    System.Windows.Forms.DataGridViewCellValueEventArgs e)
{
    // If this is the row for new records, no values are needed.
    if (e.RowIndex == this.dataGridView1.RowCount - 1) return;
    Customer customerTmp = null;
    // Store a reference to the Customer object for the row being painted.
    if (e.RowIndex == rowInEdit)
    {
        customerTmp = this.customerInEdit;
    }
    else 
    {
        customerTmp = (Customer)this.customers[e.RowIndex];
    }
    // Set the cell value to paint using the Customer object retrieved.
    switch (this.dataGridView1.Columns[e.ColumnIndex].Name)
    {
        case "Company Name":
            e.Value = customerTmp.CompanyName;
            break;
        case "Contact Name":
            e.Value = customerTmp.ContactName;
            break;
    }
}
Private Sub dataGridView1_CellValueNeeded(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _
    Handles dataGridView1.CellValueNeeded
    ' If this is the row for new records, no values are needed.
    If e.RowIndex = Me.dataGridView1.RowCount - 1 Then
        Return
    End If
    Dim customerTmp As Customer = Nothing
    ' Store a reference to the Customer object for the row being painted.
    If e.RowIndex = rowInEdit Then
        customerTmp = Me.customerInEdit
    Else
        customerTmp = CType(Me.customers(e.RowIndex), Customer)
    End If
    ' Set the cell value to paint using the Customer object retrieved.
    Select Case Me.dataGridView1.Columns(e.ColumnIndex).Name
        Case "Company Name"
            e.Value = customerTmp.CompanyName
        Case "Contact Name"
            e.Value = customerTmp.ContactName
    End Select
End Sub
	Remarks
Use this offset with the Columns property to reference the cell that the event occurs for.