0

我有一个列表视图,里面有 2 个标签,列表视图外面有 1 个标签 (lbl1)。我想让 lbl1 text = listview 中的标签。

请详细回答,我是菜鸟。每当我运行以下代码时,我都会收到此错误:“对象引用未设置为对象的实例”

这是我的代码:

protected void Page_Load(object sender, EventArgs e)
{
    Label mylabel = (Label)ListView1.FindControl("prog_idLabel");
    lbl1.Text = mylabel.Text;
}
4

3 回答 3

2

这是修复:

foreach (ListViewItem item in ListView1.Items)
{
    Label mylabel = (Label)item.FindControl("prog_idLabel");
    lblID.Text = mylabel.Text;
}
于 2012-08-07T11:07:46.080 回答
0

首先,一些防御性编程不会出错以阻止您的应用程序崩溃。

protected void Page_Load(object sender, EventArgs e)
{
    Label mylabel = (Label)ListView1.FindControl("prog_idLabel");
    if(mylabel != null)
         lbl1.Text = mylabel.Text;
}

这样,如果 FindControl 返回 null,或者您的转换不起作用,您将不会访问 null 对象。

我认为 page_load 在您实例化列表视图中的标签之前被调用。所以考虑把你的代码放在其他地方,在那里你可以确定一切都已经初始化。

于 2012-08-06T10:25:22.017 回答
0

您必须首先确保您的控件都设置为对象的实例。看起来情况并非如此。您正在处理一个 ASP.NET 项目,对吗?如果是这样,看起来您的事件处理程序就是这个。你必须确保这是正确的使用,也许你正在寻找另一个事件。

要验证是否正确设置了所有实例,请在实例化返回空引用的控件时设置断点。如果您在到达断点之前遇到异常,您应该了解正在发生的事情。一步一步慢慢运行你的代码。

于 2012-08-06T11:01:00.030 回答