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