【问题标题】:Object reference is not set to an instance of an object对象引用未设置为对象的实例
【发布时间】:2011-06-06 02:37:30
【问题描述】:

我正在尝试将值从 DetailsView 传递到 FormView 但我总是收到错误:对象引用未设置为对象的实例。不知何故,它确实传递了一个值,我仍然可以执行插入。这是我第一次用 C# 编程。任何 hep 将不胜感激!

提前致谢

这里我附上了一个代码。我认为这里的问题是我没有空检查,那么如何添加空检查?

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class BookLending : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void FormView1_DataBound(object sender, EventArgs e)
        {
            if(FormView1.CurrentMode == FormViewMode.Insert && FormView1.Fin != null) 
            {
                TextBox bookid = FormView1.FindControl("bookidTextBox") as TextBox;
                bookid.Text = ((DataRowView)DetailsView1.DataItem)["bookid"].ToString();
            }
            {
                TextBox employee = FormView1.FindControl("EmployeeIDTextBox") as TextBox;
                employee.Text = ((DataRowView)DetailsView1.DataItem)["EmployeeID"].ToString();
            }
        }
    }
}

【问题讨论】:

  • 哪一行抛出异常?
  • 对不起,这是我第一次编程,所以我怎么能“抛出异常”。我刚开始两个月前,但仍然无法得到它。看来我还有很长的路要走。哦,请原谅我的英语。
  • 按 F5 进行调试。然后当FormView1被数据绑定时,等到一行以黄色突出显示-意思是那里抛出异常。
  • @Alex:谢谢先生!这是带有突出显示的黄色的代码: bookid.Text = ((DataRowView)DetailsView1.DataItem)["bookid"].ToString();
  • 在我的回答中,你能看到((DataRowView)DetailsView1.DataItem)["bookid"] 是否为空吗?快速观察并检查。如果它为空,则ToString() 正在抛出异常,您应该围绕它进行空检查。下一步是确定您的bookid 是否是DataRowView 的有效索引。您还可以检查您是否正确地将DetailsView1.DataItem 转换为DataRowView

标签: c# asp.net


【解决方案1】:

有几个地方可以检查 null。

1) 如果你的演员表不正确:

TextBox bookid = FormView1.FindControl("bookidTextBox") as TextBox;
if (bookid != null)
    bookid.Text = ((DataRowView)DetailsView1.DataItem)["bookid"].ToString();

TextBox employee = FormView1.FindControl("EmployeeIDTextBox") as TextBox;
if (employee != null)
    employee.Text = ((DataRowView)DetailsView1.DataItem)["EmployeeID"].ToString();

2)如果控件没有值,ToString()也会抛出对象空引用异常:

((DataRowView)DetailsView1.DataItem)["bookid"] != null
((DataRowView)DetailsView1.DataItem)["EmployeeID"] != null

你的代码的哪一行抛出了异常?

【讨论】:

    【解决方案2】:

    因为是软演员,所以在某些时候它无法施放。也许可以尝试使用显式转换或单步执行代码来确定 FindControl 是否返回一个控件。

    【讨论】:

      【解决方案3】:

      线程是旧的,但是当我在表单视图的 itemtemplate 和 edititemtemplete 中绑定下拉列表选择的值时遇到了这个错误。我通过将代码放在 try catch 语句中解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2012-06-15
        • 2013-10-28
        相关资源
        最近更新 更多