A: 

Try this:

    // Define 
    dataGridView1.ColumnCount = 2;
    dataGridView1.Rows.Add();

    // Assign
    dataGridView1[0, 0].Value = "zero column zero row";
    dataGridView1[1, 0].Value = "first column zero row";
    dataGridView1[0, 1].Value = "zero column first row";
    dataGridView1[1, 1].Value = "first column first row";

There is some "magic" that takes places behind the scenes. According to the MSDN document for the Cells property:

If the row does not contain any cells when this property is accessed, a new empty DataGridViewCellCollection will be created by a call to the CreateCellsInstance method.

By specifying the ColumnCount and calling the Rows.Add method the the DataGridView has enough meta information to automatically create new Rows when directly accessing the Cells property.

Philip Fourie
Ok. It works...But does not datagridview dynamically set its no of rows and columns according to our code ? Any property or any other code do that ?
Harikrishna
yes, you are right, so what you can do is, move the entire code to grid view's data bound event and just put a for loop on rows first and then columns to get what you want to do ;)
lakhlaniprashant.blogspot.com
@Prashant sorry but there is no event like databound...
Harikrishna