我希望有人可以帮助我。我无法在ListView中找到ImageButton控件,它总是给我对象引用未设置为对象的实例错误。
情况是,如果我选中了复选框,我希望图像按钮更改其图像。 Checkbox不驻留在Listview ItemTemplate中。这是checkbox_checkchanged事件背后的代码:
if (cb.Checked)
{
foreach (Control c in lv.Controls)
{
ImageButton btndel = (ImageButton)c.FindControl("btnDelete");
btndel.ImageUrl = "~/images/activate.png";
}
}
注意:我使用ForEach循环认为btnDelete按钮在我的Listview中出现过几次。
答案 0 :(得分:1)
如果Checkbox不在ListView中,最好的方法是使用ListView的ItemCreated-Event:
protected void LV_ItemCreated(object sender, ListViewItemEventArgs e)
{
// Retrieve the current item.
ListViewItem item = e.Item;
// Verify if the item is a data item.
if (item.ItemType == ListViewItemType.DataItem && cb.Checked)
{
ImageButton btndel = (ImageButton)item.FindControl("btnDelete");
btndel.ImageUrl = "~/images/activate.png";
}
}
您不需要处理Checkbox的CheckedChanged-Event,只需要在aspx标记上添加OnItemCreated-handler:
<asp:ListView ID="LV" OnItemCreated="LV_ItemCreated" ... />
这样就可以防止ListView-Items的多次迭代。无论如何,ItemCreated将在每次回发时被隐含地调用以重新创建ListView-Items。
答案 1 :(得分:0)
在转换之前,你应该检查FindControl的结果是否为null或者是否是正确的类型。
尝试在c
对象的控件中调用FindControl,因为它可能是你正在寻找的控件再下一层嵌套(所以在ListViewItem中),实际上,你可以在lv.Items
并在那里做一个FindControl ......
答案 2 :(得分:0)
For each (ListViewDataItem c in lv.items)...