After little bit of investigation, I've found the answer for this.
I'm setting the datasource to the combobox column of the datagridview. So, after setting the datasource I'm finding the width of the largest item in the datatable for the value which is set as DisplayMember of the column. I'm using the same logic mentioned in the link given above in my question, instead of doing at DropDown event, I'm doing it while setting the Datasource, which is onetime. In the link given above in my question was setting the width of the drop down list every time drop down list is shown. So, in a way my approach looks good.
Here, how I done this:
// This line is picked up from designer file for reference
DataGridViewComboBoxColumn CustomerColumn;
DataTable _customersDataTable = GetCustomers();
CustomerColumn.DataSource = _customersDataTable;
CustomerColumn.DisplayMember = Customer_Name;
CustomerColumn.ValueMember = ID;
var graphics = CreateGraphics();
// Set width of the drop down list based on the largest item in the list
CustomerColumn.DropDownWidth = (from width in
(from DataRow item in _customersDataTable.Rows
select Convert.ToInt32(graphics.MeasureString(item[Customer_Name].ToString(), Font).Width))
select width).Max();