|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Programmatically modifying the controls in FormView's PagerTemplatethe 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. > I am attempting to access the controls in my PagerTemplate using the Where are you writing this code? I mean.. in which event-handler / method?> following code: > > CType(Me.fviewPhotoAlbum.FindControl("lnkPhotoAlbum"), LinkButton) -- Happy Hacking, Gaurav Vaish | www.mastergaurav.com www.edujini-labs.com http://eduzine.edujinionline.com ----------------------------------------- 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"/> <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"/> <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. 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 > ----------------------------------------- > > 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 |
|||||||||||||||||||||||