我有这个详细信息视图,其中我有一个字段和一个图像按钮。如果字段的值为空,我想将图像按钮设置为不可见,如果它不是空的,我想看到图像按钮。
这是我的代码:
//for (int i = 0; i < DetailsView1.Fields.Count; i++)
//{
Label lbl1 = (Label)DetailsView1.FindControl("Label1");
ImageButton img = (ImageButton)DetailsView1.FindControl("ImageButton1");
if (lbl1 != null)
{
LabelABC.Text = lbl1.Text.ToString();
img.Visible = true;
}
else
{
img.Visible = false;
}
//}
我不确定这里是否需要for循环。我也试过使用.Rows[5].Cells[1].Find...
,但是我得到了一个超出范围的错误。
根据我在上面发布的错误,我得到的错误是:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
在该行:img.Visible = false;
有关如何解决此问题的任何提示吗?谢谢你的时间。
答案 0 :(得分:1)
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
DetailsView dv = sender as DetailsView;
foreach (DetailsViewRow dvr in dv.Rows) {
ImageButton img = (ImageButton)dvr.FindControl("ImageButton1");
img.ID = img.ID + dvr.RowIndex;
}
}
尝试这样的事情......它没有以其他方式找到控件,然后你可以通过它的正常名称+行索引找到它。如果你的每一行都有一个ImageButton。然后你应该尝试用类似的foreach找到它。
答案 1 :(得分:0)
您应该在调试中单步执行该代码,以确保在您尝试访问控件时控件本身不为空。通常,您希望在主控件的DataBound事件中执行这些操作。