2012-08-06 21 views
0

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

请详细回答,我是一个noob。 每当我运行下面的代码我得到这个错误:

这里 “不设置到对象的实例对象引用”是我的代码:

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

回答

2

这是修复:

foreach (ListViewItem item in ListView1.Items) 
{ 
    Label mylabel = (Label)item.FindControl("prog_idLabel"); 
    lblID.Text = mylabel.Text; 
} 
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,或者您的转换不起作用,您将不会访问空对象。

我认为在实例化listview中的标签之前page_load会被调用。因此,请考虑将您的代码放在其他地方,您可以确保所有内容都已初始化。

+0

我不明白的错误了,但我没有看到的LBL1用更新的文本。 – 2012-08-06 11:31:31

+0

这可能是由于我在最后一段中所说的。在创建prog_idlabel并将其添加到列表视图之前,有可能会调用Page_Load。我不知道你的代码是如何构造的,但可能会把代码放在InitializeComponent()后面的Page_Load中;在你的类的构造函数中 – gcb 2012-08-06 11:35:17

+0

创建一个测试页面并将代码插入一个按钮中。在页面加载后,listview有信息,当我点击按钮来运行代码时......我什么也没得到,现在该怎么办? – 2012-08-07 08:34:04

0

您必须确保您的控件都是首先设置为对象的实例。看起来情况并非如此。你正在研究ASP.NET项目吗?如果是这样,它看起来像your event handler is this one。你必须确保这是正确的使用,也许你正在寻找另一个事件。

要确认所有实例设置正确,请在实例化返回空引用的控件时设置断点。如果你在打破转折点之前得到了异常,你应该明白发生了什么。一步一步缓慢地运行您的代码。

+0

什么是listview的事件处理程序? – 2012-08-06 11:08:30