Почему возвращаемое значение не сохраняется в DetailsView?

Ссылка на нулевой объект была решена. Теперь мне нужно, чтобы возвращаемое значение было сохранено в записи. Вот код, связанный с данными:

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

Здесь GetYear функция:

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

Для вставки я использую это:

 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

Вот как выглядит разметка:

<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> 

Разметка выглядит так:

<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>

Я не знаю, почему значение не сохраняется, так как я могу это исправить? Спасибо за помощь.

1 ответ

В событии Private Sub DetailsView1_ItemInserting я изменил

Dim txtYearPlant As TextBox = DirectCast(DirectCast(отправитель, DetailsView).indControl("YearPlant"), TextBox)

К

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

Поэтому теперь значение в текстовом поле PlantYear сохраняется в записи.

Другие вопросы по тегам