【问题标题】:Populating a variable with DetailsView textbox data value使用 DetailsView 文本框数据值填充变量
【发布时间】:2012-11-14 02:48:56
【问题描述】:

当第一次显示 ASP.Net DetailsView 数据时,您能告诉我如何填充此编码中显示的变量吗?

我已经在代码隐藏文件中尝试过,但显示错误:

Object reference not set to an instance of an object.

这是编码:

Protected Sub DetailsViewDetails_DataBound(sender As Object, e As EventArgs) Handles DetailsViewDetails.DataBound

    Dim txtOriginalRegistrationFee As TextBox

    If DetailsViewDetails.CurrentMode = DetailsViewMode.Edit Then
        txtOriginalRegistrationFee = FindControl("TextBoxRegistrationFee")

        If String.IsNullOrEmpty(txtOriginalRegistrationFee.Text) = False Then
            MsgBox(txtOriginalRegistrationFee)
        End If
    End If
End Sub

这是来自 aspx 文件:

<asp:TemplateField HeaderText="RegistrationFee" SortExpression="RegistrationFee">
   <EditItemTemplate>
      <asp:TextBox ID="TextBoxRegistrationFee" runat="server" Text='<%# Eval("RegistrationFee") %>'></asp:TextBox>
   </EditItemTemplate>

   <InsertItemTemplate>
      <asp:TextBox ID="TextBoxRegistrationFee" runat="server" Text='<%# Bind("RegistrationFee") %>'></asp:TextBox>
   </InsertItemTemplate>

   <ItemTemplate>
      <asp:Label ID="LabelRegistrationFee" runat="server" Text='<%# Bind("RegistrationFee", "{0:c}") %>'></asp:Label>
   </ItemTemplate>

   <ItemStyle ForeColor="Blue" />
</asp:TemplateField>

* 更新 *

我尝试使用根据您的帮助更新的此编码,但仍然得到“对象引用未设置为对象的实例”。点击DetailsView的编辑按钮时出错。

【问题讨论】:

  • 哪一行出现错误?
  • 如果 String.IsNullOrEmpty(txtOriginalRegistrationFee.Text) = False 那么

标签: asp.net vb.net detailsview


【解决方案1】:

FindControl 函数需要一个控件来搜索,否则它将搜索页面(或内容)级别的控件。

试试

txtOriginalRegistrationFee = DetailsViewDetails.FindControl("TextBoxRegistrationFee")

顺便说一句,你的 MsgBox 函数行也不起作用。 MsgBox 适用于 windows 窗体,不能在 web 上运行。您必须使用 javascript 来实现该类型的功能。另外,该函数接受一个字符串,而不是一个控件。

【讨论】:

    【解决方案2】:

    我不在 VB 中工作,所以请多多包涵……仅当您的详细信息视图处于插入模式时才会呈现模板。

    Dim txtOriginalRegistrationFee As TextBox
    
    If DetailsViewDetails.CurrentMode = DetailsViewMode.Insert Then
        txtOriginalRegistrationFee = FindControl("TextBoxRegistrationFee")
    
        If String.IsNullOrEmpty(txtOriginalRegistrationFee.Text) = False Then
            MsgBox(txtOriginalRegistrationFee)
        End If
    End If
    

    【讨论】:

    • 感谢编码。是否可以在编辑模式下获取该值,例如: If DetailsViewDetails.CurrentMode = DetailsViewMode.Edit Then ...?
    • 您可以在插入和编辑模式下使用相同的文本框。只需将其包含在两个模板中即可。
    • 感谢您的回复。我在编辑模式下尝试过,但仍然出现“对象引用未设置为对象实例”错误。我想我需要使用“新”,但不知道这样做。您能否展示一个将 txtOriginalRegistrationFee 设为新对象的代码示例?
    • 您仍需要在详细信息视图中检查特定的 CurrentMode。如果处于 EditMode 中,则 InsertTemplate 中的控件不存在。在 InsertMode 中编辑控件也是如此。
    • 感谢 andleer 的回复。我更新了我的帖子。看起来我需要使用“新”关键字。你能告诉我如何通过包含该关键字来更正我的编码吗?
    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多