FormView.FindControl() returns null until DataBind

2019-01-26 19:30发布

Why method FindControl() returns null on FormView until call DataBind().

After that it returns everything correctly?

What workaround are there?

Call DataBind() before first call of FindControl() ?

5条回答
三岁会撩人
2楼-- · 2019-01-26 19:52

It is very odd. Did not work for me just calling DataBind(). I had to create a new List, add an item, set as datasource, then databin.

List<Item> dummyList = new List<Item>();
dummyList.Add(new Item());
formview.DataSource = dummyList;
formview.DataBind();
查看更多
Viruses.
3楼-- · 2019-01-26 19:54

It has nothing to do with BINDING. One is looking for SERVER CONTROL, not for ITS BOUND DATA. SO - control should be available via FindControl. The reason is somewhere else...

查看更多
孤傲高冷的网名
4楼-- · 2019-01-26 19:59

Either explicitly call DataBind(), or place your code in the DataBound event of the FormView.

查看更多
趁早两清
5楼-- · 2019-01-26 20:09

How would a FormView have any information about its content before it has any data to build it upon?

So I guess you already answered your own question, you will have to DataBind() before.

查看更多
▲ chillily
6楼-- · 2019-01-26 20:13

what I experienced is this,

System.Web.UI.HtmlControls.HtmlImage bookmarkload = sessionDetail.FindControl("bookmarkimage") as System.Web.UI.HtmlControls.HtmlImage;

returned null.

So, I did this:

 protected void sessionDetail_DataBound(object sender, EventArgs e)
        {
            LoadBookmarkImage();
        }
  private void LoadBookmarkImage()
        {
            //if (_swapDetails != null)
            //{             
                try
                {
                    _currnetSession = new SessionBL(_user);

                    List<SessionVO> _tmp = null;
                    string sample = Convert.ToString(Page.RouteData.Values["sessionCode"]);
                    if (Session["Prefernce"] != null)
                    {
                        _tmp = (List<SessionVO>)Session["Prefernce"];
                    }
                    if (_tmp != null && _tmp.Count > 0)
                    {
                        _tmp = _tmp.Where(p => p.SessionCode == sample).ToList();
                    }

                    //_currentFavorite.SessionD = _swapDetails[0];
                    _currentFavorite.SessionD = _tmp[0];

                    List<FavoriteVO> _swapList = _user.ViewFavoriteONID(_currentFavorite.SessionD.SessionID);

                    if (_swapList != null && _swapList.Count > 0)
                    {
                        //access javascript counter variable
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "", "counter=1;", true);
                        System.Web.UI.HtmlControls.HtmlImage bookmarkload = sessionDetail.FindControl("bookmarkimage") as System.Web.UI.HtmlControls.HtmlImage;
                        bookmarkload.Src = "/Images/heart-checked.png";
                    }
                }
                catch (Exception ex)
                {
                    labelinfo.Visible = true;
                    labelinfo.InnerHtml = ex.Message;
                    labelinfo.Attributes["class"] = "centering text-center text-danger";
                }
            //}
        } 
查看更多
登录 后发表回答