在其他字段上控制后,在detailsview中设置imagebutton可见

时间:2011-05-29 13:13:51

标签: c# detailsview findcontrol

我有这个详细信息视图,其中我有一个字段和一个图像按钮。如果字段的值为空,我想将图像按钮设置为不可见,如果它不是空的,我想看到图像按钮。

这是我的代码:

//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;

有关如何解决此问题的任何提示吗?谢谢你的时间。

2 个答案:

答案 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事件中执行这些操作。