If you use a column of templates, you can bind a drop-down menu from the markup using data binding expressions. For instance,
<asp:TemplateField HeaderText="XYZ">
<ItemTemplate>
<asp:DropDownList runat="server" ID="MyDD" DataSourceId="MyDataSource" />
</ItemTemplate>
</asp:TemplateField>
The above assumes your dropdown data is row-wise. If it changes, you can use a data binding expression such as
<asp:DropDownList runat="server" DataSource='<%# GetDropDownData(Container) %>' DataTextField="Text" DataValueField="Value" />
GetDropDownData will be a protected method in the code that will return data (data table, list, array) for a given row.
GridView.RowDataBound ( RowCreated) . ,
protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
var dd = e.Row.Cells[2].Controls[0] as DropDownList;
if (null != dd) {
}
}
}