Here's the working model:
Sub dgv_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles dgv.RowDataBound
If e.Row.RowState = DataControlRowState.Edit Then
Dim md As Med = CType(e.Row.DataItem, Med)
Dim _type As String = md.DType
Dim ddl As DropDownList = CType(e.Row.FindControl("ddlDType"), DropDownList)
Dim item As ListItem = ddl.Items.FindByText(_type)
ddl.SelectedIndex = ddl.Items.IndexOf(item)
End If
End Sub
Sub dgv_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) Handles dgv.RowUpdating
Dim row As GridViewRow = dgv.Rows(dgv.EditIndex)
Dim list As DropDownList = CType(row.FindControl("ddlDType"), DropDownList)
e.NewValues("DType") = list.SelectedValue
End Sub
Private Sub dgv_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles dgv.RowEditing
If Not dgv.EditIndex = -1 Then
Try
Dim row As GridViewRow = dgv.Rows(dgv.EditIndex)
Dim ddl As DropDownList = CType(row.FindControl("ddlDType"), DropDownList)
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(CType(row.DataItem, Med).DType))
Catch
End Try
End If
End Sub
<asp:TemplateField HeaderText="DType" >
<ItemTemplate >
<asp:Label ID="lbDT" Text='<%# Bind("DType")%>' runat="server" ></asp:Label>
</ItemTemplate>
<EditItemTemplate >
<asp:DropDownList ID="ddlDType" DataSourceID="edsDDL" DataTextField="types" DataValueField="types" runat="server" ></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>