Home All Groups Group Topic Archive Search About

Programmatically modifying the controls in FormView's PagerTemplate

Author
13 Jan 2007 9:02 AM
Nathan Sokalski
I am trying to create a FormView controls in which I access and modify the
the controls in the PagerTemplate programmatically. However, I continue to
recieve the following error:

Object reference not set to an instance of an object.

I am attempting to access the controls in my PagerTemplate using the
following code:

CType(Me.fviewPhotoAlbum.FindControl("lnkPhotoAlbum"), LinkButton)


I have tried doing this from all the events that I could think of and that I
noticed mentioned on any help sites I could find, but it didn't help. I
don't know what I am doing wrong, if anyone could help me I would greatly
appreciate it. Thanks.
--
Nathan Sokalski
njsokal***@hotmail.com
http://www.nathansokalski.com/

Author
14 Jan 2007 8:30 AM
Gaurav Vaish (MasterGaurav)
> I am attempting to access the controls in my PagerTemplate using the
> following code:
>
> CType(Me.fviewPhotoAlbum.FindControl("lnkPhotoAlbum"), LinkButton)

Where are you writing this code? I mean.. in which event-handler / method?


--
Happy Hacking,
Gaurav Vaish | www.mastergaurav.com
www.edujini-labs.com
http://eduzine.edujinionline.com
-----------------------------------------
Author
15 Jan 2007 2:07 AM
Nathan Sokalski
Because this is my first time using the FormView control (although I have
had plenty of experience with the DataList control, so I have used templates
before), I tried putting it in the Page's Load eventhandler. Something that
I saw on the Internet said to put it in the FormView control's ItemCreated
eventhandler, but that didn't work either. Here is the code I have in my
Page's Load eventhandler:

Private Sub index_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load

Dim photoalbum As New DataTable

Dim dataadapterSelect As New System.Data.OleDb.OleDbDataAdapter("SELECT *
FROM babyphotos ORDER BY photodate,filename",
System.Configuration.ConfigurationManager.AppSettings("connectionstring"))

dataadapterSelect.Fill(photoalbum)

Me.fviewPhotoAlbum.DataSource = photoalbum

Me.fviewPhotoAlbum.DataBind()

'Hide unnecessary numeric LinkButtons

For i As Integer = 1 To 10

CType(Me.fviewPhotoAlbum.FindControl("lnkPhotoAlbum" & CStr(i)),
LinkButton).Visible = (i <= photoalbum.Rows.Count)

Next

End Sub


The basic goal of this code is to not show more numeric controls than
necessary (I don't want to show 10 controls if there are only 5 records).
Here is my FormView control:

<asp:FormView ID="fviewPhotoAlbum" runat="server" AllowPaging="True"
HorizontalAlign="Center">

<PagerSettings NextPageImageUrl="images/NextBtn.gif"
PreviousPageImageUrl="images/PrevBtn.gif" Mode="NextPrevious"/>

<rowstyle HorizontalAlign="Center"/>

<ItemTemplate>

<asp:Image ID="imgPhoto" runat="server" BorderWidth="0px"
ImageAlign="Middle" ImageUrl='<%#
DataBinder.Eval(Container,"DataItem.filename","images/photoalbum/{0}")
%>'/><br/>

<asp:Label ID="lblPhotoCaption" runat="server"
AssociatedControlID="imgPhoto" Text='<%#
DataBinder.Eval(Container,"DataItem.caption") %>'/><br/>

<asp:Label ID="lblPhotoDate" runat="server" AssociatedControlID="imgPhoto"
Text='<%# DataBinder.Eval(Container,"DataItem.photodate","Photo taken on:
{0:D}") %>'/>

</ItemTemplate>

<PagerTemplate>

<asp:ImageButton ID="imgPrevious" runat="server" AlternateText="Previous
Photo" BorderWidth="0px" CausesValidation="False" CommandArgument="Prev"
CommandName="Page" Height="35px" ImageUrl="images/PrevBtn.gif"
Width="35px"/>&nbsp;

<asp:LinkButton ID="lnkPhotoAlbum1" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum2" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum3" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum4" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum5" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum6" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum7" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum8" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum9" runat="server" CausesValidation="false"
CommandName="Page"/>

<asp:LinkButton ID="lnkPhotoAlbum10" runat="server" CausesValidation="false"
CommandName="Page"/>&nbsp;

<asp:ImageButton ID="imgNext" runat="server" AlternateText="Next Photo"
BorderWidth="0px" CausesValidation="False" CommandArgument="Next"
CommandName="Page" Height="35px" ImageUrl="images/NextBtn.gif"
Width="35px"/>

</PagerTemplate>

</asp:FormView>


Thanks.
--
Nathan Sokalski
njsokal***@hotmail.com
http://www.nathansokalski.com/

Show quote
"Gaurav Vaish (MasterGaurav)" <gaurav.vaish.nospam@nospam.gmail.com> wrote
in message news:uIU30I8NHHA.780@TK2MSFTNGP03.phx.gbl...
>> I am attempting to access the controls in my PagerTemplate using the
>> following code:
>>
>> CType(Me.fviewPhotoAlbum.FindControl("lnkPhotoAlbum"), LinkButton)
>
> Where are you writing this code? I mean.. in which event-handler / method?
>
>
> --
> Happy Hacking,
> Gaurav Vaish | www.mastergaurav.com
> www.edujini-labs.com
> http://eduzine.edujinionline.com
> -----------------------------------------
>
>
Author
29 Jan 2007 7:46 PM
Oubit
Hi. Perhaps that I'm going 2 tell U dont be a solution but i was trying somthing similar to your code.

First of all, you must place your code in the ItemCreated event. There you can acces the current DataRowView and DataItem container. In the DataRowView you can find your control in the way you're doing, and int the DataItem you can get your data source fields. You have it all!!!

Well, it's important to notice that controls are not always in the FormView. It depends on CurrentMode, so my advice is to check always the mode the control is going to load

My code looks like that:
protected void FormView1_ItemCreated(object sender, EventArgs e)
    {
        if (FormView1.CurrentMode == FormViewMode.Edit)
        {
            //selected value
            DropDownList ddl = ((DropDownList)FormView1.FindControl("ddlProf"));
            if ((ddl != null) && (ddl.Items.Count > 0))
                ddl.SelectedValue = Convert.ToString(DataBinder.Eval(FormView1.DataItem, "ID_Profesor"));
        }
    }

To finish the post, i add another workaround. You can define the DataBinding event to your control (In my case, the dropdownlist). In the event handler, use the NamingContainer to acces the FormView and DataItem. Something like:
protected void ddlProf_DataBinding(object sender, EventArgs e)
    {
        DropDownList ddl = ((DropDownList)sender);
        FormView fView = (FormView)ddl.NamingContainer;
        DataRowView rowView = (DataRowView)fView.DataItem;
        if (!System.DBNull.Value.Equals(rowView["ID_Profesor"]))
            ddl.SelectedValue = rowView["ID_Profesor"].ToString();  
    }

Well, I hope that can help you in any way. If not, please, contact me

EggHeadCafe.com - .NET Developer Portal of Choice
http://www.eggheadcafe.com

AddThis Social Bookmark Button