Why method FindControl()
returns null
on FormView
until call DataBind()
.
After that it returns everything correct
Either explicitly call DataBind(), or place your code in the DataBound event of the FormView.
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";
}
//}
}
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();
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.
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...