My last post dealt with data entry on initial input. This is the same issue but on changing or updating the data.
I have a single DropDownList in a TemplateField in a DetailsView that is populated by one or the other of two different tables based on the setting of a switch. If the switch is set to 'SCANG' the DropDownList shows Air Guard rank. If set to 'SCARNG' the DropDownList shows Army Guard rank.
When I input the record and then bring it up on update to change the record data all is well. When I change the rank, and the listing is still appropriate for Air or Army, the new rank is lost on update. When I bring the record up for the third time, the rank is blank or null even though the DropDownList still shows the appropriate table. I have tried 'SelectedValue', 'SelectedValue.ToString', 'SelectedItem.Text' and 'SelectedItem.Value' but all show up as Null in debug of the CodeBehind.
Display Code:
Code:
                <asp:TemplateField HeaderText="Branch / Component" SortExpression="COMPONENT">
                    <ItemTemplate>
                        <asp:Label ID="lblCmpt" runat="server" Text='<%# Bind("COMPONENT") %>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Rank" SortExpression="RANK" ControlStyle-Width="45%" Visible="false">
                    <ItemTemplate>
                        <asp:Label ID="lblRANK" runat="server" Text='<%# Bind("RANK")%>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Rank" SortExpression="RANK" ControlStyle-Width="45%">
                    <EditItemTemplate>
                        <asp:DropDownList ID="ddlRANK" runat="server"/>
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Highest Rank" SortExpression="HRANK" ControlStyle-Width="45%" Visible="false">
                    <ItemTemplate>
                        <asp:Label ID="lblHRANK" runat="server" Text='<%# Bind("HRANK")%>'/>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Highest Rank" SortExpression="HRANK" ControlStyle-Width="45%">
                    <EditItemTemplate>
                        <asp:DropDownList ID="ddlHRANK" runat="server"/>
                    </EditItemTemplate>
                </asp:TemplateField>
CodeBehind Code:
Code:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim lblComp As Label = DetailsView1.FindControl("lblCmpt")
        Dim lblRnk As Label = DetailsView1.FindControl("lblRank")
        Dim lblHRnk As Label = DetailsView1.FindControl("lblHRank")
        Dim ddlRnk As DropDownList = DetailsView1.FindControl("ddlRank")
        Dim ddlHRnk As DropDownList = DetailsView1.FindControl("ddlHRank")

        If lblComp.Text = "SCANG" Then
            ddlRnk.DataSourceID = "SqlDataSource3"
            ddlHRnk.DataSourceID = "SqlDataSource3"
        Else
            ddlRnk.DataSourceID = "SqlDataSource4"
            ddlHRnk.DataSourceID = "SqlDataSource4"
        End If

        ddlRnk.SelectedValue = lblRnk.Text
        ddlRnk.DataValueField = "Abbreviation"
        ddlRnk.DataTextField = "Rank"
        ddlRnk.DataBind()
        ddlHRnk.SelectedValue = lblHRnk.Text
        ddlHRnk.DataValueField = "Abbreviation"
        ddlHRnk.DataTextField = "Rank"
        ddlHRnk.DataBind()

    End Sub

    Protected Sub DetailsView1_ItemUpdating(sender As Object, ByVal e As DetailsViewUpdateEventArgs) Handles DetailsView1.ItemUpdating

        Dim lblComp As Label = DetailsView1.FindControl("lblCmpt")
        Dim lblRnk As Label = DetailsView1.FindControl("lblRank")
        Dim lblHRnk As Label = DetailsView1.FindControl("lblHRank")
        Dim ddlRnk As DropDownList = DetailsView1.FindControl("ddlRank")
        Dim ddlHRnk As DropDownList = DetailsView1.FindControl("ddlHRank")

        If lblComp.Text = "SCANG" Then
            ddlRnk.DataSourceID = "SqlDataSource3"
            ddlHRnk.DataSourceID = "SqlDataSource3"
        Else
            ddlRnk.DataSourceID = "SqlDataSource4"
            ddlHRnk.DataSourceID = "SqlDataSource4"
        End If

        'lblRnk.Text = ddlRnk.SelectedValue
        lblRnk.Text = ddlRnk.SelectedValue.ToString
        'lblRnk.Text = ddlRnk.SelectedItem.Text
        'lblRnk.Text = ddlRnk.SelectedItem.Value
        ddlRnk.DataValueField = "Abbreviation"
        ddlRnk.DataTextField = "Rank"
        ddlRnk.DataBind()
        'lblHRnk.Text = ddlHRnk.SelectedValue
        lblHRnk.Text = ddlHRnk.SelectedValue.ToString
        'lblHRnk.Text = ddlHRnk.SelectedItem.Text
        'lblHRnk.Text = ddlHRnk.SelectedItem.Value
        ddlHRnk.DataValueField = "Abbreviation"
        ddlHRnk.DataTextField = "Rank"
        ddlHRnk.DataBind()

    End Sub