2

The null object reference was solved. Now I need the returned value to be saved to the record. Here is the data bound code:

Private Sub dvSMasterCurrentYear_DataBound(sender As Object, e As EventArgs) Handles dvSMasterCurrentYear.DataBound
        Dim dv As DetailsView = New DetailsView
        dv = dvSMasterCurrentYear
        If DetailsViewMode.Insert Then
            Dim ctl = dv.FindControl("PlantYear")
            If ctl IsNot Nothing Then
                DirectCast(dv.FindControl("PlantYear"), TextBox).Text = GetYear()
            Else
                Throw New Exception("Control was not found")
            End If
        End If
    End Sub

Here is the GetYear function:

 Public Function GetYear()
        Dim thisDate As Date = Now
        Dim thisYear As String
        'thisDate = #2/12/1969#
        thisYear = Year(thisDate)
        Return thisYear
    End Function

For inserting I use this :

 Private Sub DetailsView1_ItemInserting(sender As Object, e As DetailsViewInsertEventArgs) Handles dvSMasterCurrentYear.ItemInserting
            Dim view As DetailsView = DirectCast(sender, DetailsView)
            Dim txtYearPlant As TextBox = DirectCast(DirectCast(sender, DetailsView).FindControl("PlantYear"), TextBox)
End Sub

This is what the mark up looks like:

<asp:TemplateField HeaderText="Year Plant (yyyy)*">
                      <ItemTemplate>
                         <asp:Label ID="Label1" runat="server" Text='<%# Bind("PlantYear") %>'></asp:Label>
                          <%# Eval("Year")%>
                     </ItemTemplate>  
                    <EditItemTemplate>
                         <asp:TextBox ID="PlantYear" runat="server"></asp:TextBox>
                     </EditItemTemplate>
                     <InsertItemTemplate>
                          <asp:TextBox ID="PlantYear" runat="server" Text='<%# GetYear()%>'></asp:TextBox >
                     </InsertItemTemplate>
                 </asp:TemplateField> 

Markup looks like:

<asp:TemplateField HeaderText="Year Plant (yyyy)*"> 
   <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("PlantYear")%>'></asp:Label> 
       <%# Eval("Year")%> 
   </ItemTemplate> 
   <EditItemTemplate> 
      <asp:TextBox ID="PlantYear" runat="server"></asp:TextBox>      
   </EditItemTemplate> 
   <InsertItemTemplate> 
      <asp:TextBox ID="PlantYear" runat="server" Text='<%# GetYear()%>'></asp:TextBox > 
   </InsertItemTemplate> 
</asp:TemplateField>

I don't know why the value is not being saved, so how do I fix it? Thank you for your help.

rene
  • 41,474
  • 78
  • 114
  • 152
jim davis
  • 63
  • 3

1 Answers1

0

In Private Sub DetailsView1_ItemInserting event I changed

Dim txtYearPlant As TextBox = DirectCast(DirectCast(sender, DetailsView).FindControl("YearPlant"), TextBox)

TO

Dim txtYearPlant As TextBox = TryCast(view.FindControl("YearPlant"), TextBox) e.Values.Add("YearPlant", txtYearPlant.Text)

So now the value in the PlantYear textbox is saved to the record.

jim davis
  • 63
  • 3