C# - Getting The Object Inside Repeater ItemTemplate With / Without Eval
Nov 13, 2010
I am new to Repeater and DataBinding
In PageLoad, I have
var photos = from p in MyDataContext.Photos
select new {
p,
Url = p.GetImageUrl()
};
repeater1.DataSource = photos;
repeater1.DataBind();
In the Repeater control, I have
<ItemTemplate>
<% Photo p = (Photo) Eval("p"); %> <!-- Apparently I can't do this -->
...
<asp:TextBox runat="server" ID="txtTime" Text='<%= p.Time == null ? "" : ((DateTime)p.Time).ToString("dd/MM/yyyy HH:mm:ss") %>' />
...
</ItemTemplate>
But that is wrong.
What I need is to get the Photo object in ItemTemplate so I can do things with it (eg. to display the time as in the second line in ItemTemplate above). Is it even possible to do this in a Repeater?
View 2 Replies
Similar Messages:
Feb 20, 2010
The following seems reasonable, but it returns an error:
<asp:Repeater ID="RepeaterF" runat="server" DataSourceID="DSF" >
<ItemTemplate>
<%
If Eval("Item_Batch") = 0 Then
%><tr><td></td><td colspan="2"></td><td></td></tr><%
Else %>........
Error: "Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control."
I am finding it difficult to accept that the whole Repeater approach has any benefits over just creating a loop in code, iterating through a recordset, and building a html table into a variable, then dumping it to the page. This repeater is spawning pages of code and objects, and surely this is all using up server resources.
View 2 Replies
Apr 4, 2011
I have a user control which is used to display search results. The HTML for each result displayed will vary based on the type of result being displayed: "contacts" are displayed in one way, "news articles" are displayed in another, etc. There are around 10 different types of results that are all marked up differently when they get to HTML — so I need around 10 or so different templates for individual results that I can choose between based on the current item being displayed.
I'm using an asp:Repeater to display the results, but I don't know how to select the appropriate template within the asp:Repeater <ItemTemplate>. Ideally I'd like the ASP to select the appropriate template to use based upon the object type being passed in via the searchResultsRepeater.DataSource — but unfortunately I can't use switch on type (see this blog entry for C# switch on type). I can however just pass through an enum value for the type of result being displayed.
In the backend C# code I have an abstract inline SearchResult class, and children of that class like ContactSearchResult, NewsArticleSearchResult, etc. The searchResultsRepeater.DataSource would then be bound to a List<SearchResult>. Each SearchResult contains a ResultListingType type field which gives the type of the listing to be displayed.
Attempt 1: using control flow inside the ASP itself
My first attempt was something like this:
<asp:Repeater ID="searchResultsRepeater" runat="server">
<ItemTemplate>
<div class="item">
<% switch (DataBinder.Eval(Container.DataItem, "type")) { %>
<% case ResultListingType.CONTACT: %>
<p><%# DataBinder.Eval(Container.DataItem, "firstName") %></p>
<p><%# DataBinder.Eval(Container.DataItem, "lastName") %></p>
<% break; %>
<% case ResultListingType.NEWS: %>
<p><%# DataBinder.Eval(Container.DataItem, "newsHeadline") %></p>
<p><%# DataBinder.Eval(Container.DataItem, "newsDate") %></p>
<% break; %>
<% Case AnotherTypeOfListing1: %>
<% Case AnotherTypeOfListing2: %>
<% Case AnotherTypeOfListing3: %>
<% Case AnotherTypeOfListing4: %>
<% Case AnotherTypeOfListing5: %>
<% etc... %>
<% } %>
</div>
</ItemTemplate>
</asp:Repeater>
Unfortunately, this doesn't work:
"switch" and "if" both give "invalid expression term" inside the <%# ... %> brackets.
"Container.DataItem" gives "the name "Container" does not exist in the current context" inside <% ... %> brackets.
Attempt 2: setting asp:PlaceHolder's to Visible = False
I found something that looked useful at how to change the ItemTemplate used in an asp:repeater?. I then tried something like:
<asp:Repeater ID="searchResultsRepeater" runat="server">
<ItemTemplate>
<div class="item">
<asp:PlaceHolder ID="newsResultListing" runat="server">
<p><%# DataBinder.Eval(Container.DataItem, "newsHeadline") %></p>
<p><%# DataBinder.Eval(Container.DataItem, "newsDate") %></p>
</asp:PlaceHolder>
<asp:PlaceHolder ID="contactResultListing" runat="server">
<p><%# DataBinder.Eval(Container.DataItem, "firstName") %></p>
<p><%# DataBinder.Eval(Container.DataItem, "lastName") %></p>
</asp:PlaceHolder>
</div>
</ItemTemplate>
</asp:Repeater>
In my ItemDataBound event I did:
Control newsResultListing = e.Item.FindControl("newsResultListing");
newsResultListing.Visible = false;
Control contactResultListing = e.Item.FindControl("contactResultListing");
contactResultListing.Visible = false;
switch (item.type)
{
case ResultListingType.CONTACT:
contactResultListing.Visible = true;
break;
case ResultListingType.NEWS:
newsResultListing.Visible = true;
break;
default:
throw new Exception("Unknown result listing type");
}
Unfortunately this doesn't work because ASP seems to still be running the contents of the PlaceHolder even after I set Visible = false. I get the error "DataBinding: 'usercontrols_ResultsListing+ContactResultsListing' does not contain a property with the name 'newsHeadline'" — i.e. the newsResultListing PlaceHolder is still looking for the "newsHeadline" field, even though that field doesn't exist for the result listing type being displayed.
In fact I've tried a quick test throw new Exception("e"); in my ItemDataBound, and it looks like the "DataBinding" error is thrown even before control flow gets to the ItemDataBound method, so there's really nothing I can do in there to avoid this error.
I suppose I could add every single field to the parent class and leave most of them null in my children, but that seems really ugly.
Is there a way to make this work, or an easier way to vary my ItemTemplate based upon the type of Container.DataItem I'm currently iterating over? I'm very new to ASP so there's likely something simple that I've missed.
View 2 Replies
Apr 1, 2010
Inside repeater's itemtemplate I have a Panel server control.I need to assign special Id for it, because I need to work with some javascript functions that use this Id.
In repeater ItemDataBound event I have this:
pnlButtonsPanel.ID = pnlButtonsPanel.ID + DataBinder.Eval(e.Item.DataItem, "ID");
But this solution is not good because after a postback the page is re -rendered and I lose the new ID. (And I don't want to rebind repeater after every postback)
I tried to set the ID on aspx page like that:
<asp:Panel id='<%# Eval("ID") %>'
and some other variations but always get compile errors.
View 1 Replies
Jun 20, 2010
I am having big trouble with this issue, getting a message from IE that a script is being running for a long time and asking me to stop it myself.
The HTMLEditor seems to be uncomptible with this one.
I am also getting a very weak performance when adding this Ajax control.
I think this control is very heavy, but I'm not sure. If I am not wrong, this post I'm writing is inside the same control and I can see it takes time to load it in my page.
View 1 Replies
Jul 23, 2012
I have repeter where i display news headline and news. Five news bind each time. now i want to show facebook send button below with with each news.
View 1 Replies
Jan 17, 2011
I have something like this:
[Code]....
[Code]....
This does NOT work. What's wrong here?How do I accomplish my goal? I MUST use the Button1_Click event for this one.
View 13 Replies
Jan 16, 2010
why I get this error:
Object reference not set to an instance of an object.
when I try to access a LinkButton inside a Repeater as follows:
[Code]....
[Code]....
View 4 Replies
Nov 11, 2010
I have a listview control on an .aspx page. Inside this list view i want to check "Type" property which comes from database. here is the example code :
[code]...
As a last resort i tried to user DataBinder.Eval() but i get the exception "Expected class, delegate, enum, interface, or struct". What can i be doing wrong? Writing a function in code-behind isn't an option for me.
View 3 Replies
Apr 16, 2010
I have a user control inside a repeater. I am binding a collection of objects to the repeater.
My user control has a public property to retrieve the object (setobject)
How do i pass each object through to the user control and not just the object property value? What is the syntax to do this?
[code]....
View 1 Replies
Dec 21, 2010
I have a GridView with an TemplateField:
<asp:GridView runat="server" ID="gvReport" ondatabinding="gvReport_DataBinding">
<Columns>
<asp:TemplateField >
<ItemTemplate>
<asp:Label runat="server" Text='<%#Eval("answers") %>' /> out of <asp:Label runat="server" Text='<%#Eval("questions") %>' />
</ItemTemplate>
</asp:TemplateField >
</Columns>
</asp:GridView>
What I'd like to do on gvReport_DataBinding is change the field the Evals point to, so I end up with something like:
<asp:Label runat="server" Text='<%#Eval("answers_foo") %>' /> out of <asp:Label runat="server" Text='<%#Eval("questions_foo") %>' />
I have gotten this far:
TemplateField tf = ((TemplateField)gvReport.Columns[0]);
But I'm not sure what I should be doing with tf. tf.SomeProperty.Replace("answers", "answers_foo")?
Or am I barking up the wrong airplane on this one?
View 9 Replies
Jun 24, 2012
i have date column in my database that is that save date and time toghether i need saving date and time in my database .
now i want show date column in my gridview but i dont want it show the time i  want it show just date how i can do it?
View 1 Replies
Sep 7, 2010
I need to change the row.forecolor = drawing.color.red.
in my gridview i have a STATUS field, its ItemTemplate is LABEL1 and its EditTemplate is DropDownList1.
on loading I have successfully changed the forecolor, but when I edit it gave me an error:
Object reference not set to an instance of an object.
View 7 Replies
Mar 22, 2011
Can I use variable in eval in repeater? Or how can I use it?
For example:
<%# DataBinder.Eval(Container.DataItem, lngHome) %>
Code behind in form load:
[code]....
I have 2 fields in database table: eng_detail and tr_detail
So how can I use like this <%# DataBinder.Eval(Container.DataItem, lngHome) %>?
View 2 Replies
May 7, 2015
I have gridview in my page that users can edit their data in gridview... and in this gridview I define label that I want when users click on Edit button it change label3.text:
below is code:
<asp:GridView ID="GridView1" runat="server" CssClass="DGridView1"
        AutoGenerateColumns = "false" Font-Names = "Tahoma"
        Font-Size = "9pt"
        HeaderStyle-BackColor = "#e0e0e0"
        OnPageIndexChanging = "OnPaging" onrowediting="EditCustomer"
        onrowupdating="UpdateCustomer" onrowcancelingedit="CancelEdit"
         GridLines = "Both" OnRowDataBound = "OnRowDataBound"
>
And .cs:
protected void EditCustomer(object sender, GridViewEditEventArgs e) {
Label Label3 = (Label)GridView1.Rows[e.NewEditIndex].FindControl("Label3");
Label3.Text = "neda";
GridView1.EditIndex = e.NewEditIndex;
BindData();
BindData1();
}
but here when I click on EditCustomer it doen't change label3.textÂ
View 1 Replies
Aug 27, 2010
I have a button on a page with a Repeater and an ObjectDataSource. To give credit where credit is due, the Repeater's paging functionality is courtesy of ScottGu. (However, I'm using ASP.NET 4.0 and SQL Server 2008, as opposed to ASP.NET 2.0 and SQL Server 2005.)
Anyway, in the button's click event, I need to access the Text property of a Label that's inside the Repeater because it's used as an input parameter in a stored procedure. I'm getting a NullReferenceException when trying to access the Label's Text property. I have researched this error and have tried a few different solutions (involving FindControl and the Repeater's ItemDataBound event), but I haven't been able to get it to work. The code is below.
somepage.aspx
[Code]....
View 2 Replies
Mar 21, 2010
I want to do something like this, haven't been able to make it work, I can't get the code syntax right on the style attribute of the div tag:
[Code]....
Maybe it wont ever work and I must find another way?
View 3 Replies
Mar 11, 2010
I'm currently using a certain ItemTemplate for three repeaters that are all on the same page, but they are all bound to different data sources. Is there any way to refactor my web form without using a user control to easily refer to this template so I will only have to define it once?
View 2 Replies
Jul 22, 2010
isn't present databound event on asp repeater server control?I just want to bind all my data, and at the end creates a new ItemTemplate and add it, but just when is all data binded
View 1 Replies
Jun 22, 2010
I have tried many different combinations to try to get this to work, but I cannot. In the ItemTemplate of a Repeater control, I have a <form> tag. For this third party button to work, each button needs to be surrounded by <form></form> tags. I cannot get the first iteration of the repeater to display the tag, but 2, 3 and beyond, it will. It doesn't make sense to me. Because of this, IE is displaying the page in a funky way.
To see the generated code on the page, http://AdvancedSurveillancePro.com/services.aspx
Here is my repeater code:
[Code]....
View 3 Replies
Jan 19, 2011
can anyone tell how to use slideToggle function on LinkButton that is placed in ItemTemplate of a Repeater control. Upon clicking the LinkButton a Panel below that link will apear that contains other controls. But how can i write dynamic jQuery Script for each LinkButton ?
View 6 Replies
Feb 3, 2014
I am using a repeater control and i want to use one more repeater control inside the existing repeater control .Â
Like this:
<asp:Repeater ID="Repeater1" runat="server">Â Â Â <HeaderTemplate>Â </HeaderTemplate>Â Â Â Â Â Â
<ItemTemplate>
<!-- start child repeater -->    Here I want to use one repater control     <!-- end child repeater -->
</ItemTemplate>
</asp:Repeater>
View 1 Replies
Feb 22, 2011
I have the following problem and I hope some of you could help me because I'm sick and tired of trying to get this fixed.
I have an asp:repeater which has the following <ItemTemplate>
[Code]....
[Code]....
[Code]....
[Code]....
[Code]....
but it really looks like this.
View 1 Replies
Nov 26, 2010
My repeater:
<asp:Repeater ID="rptrContacts" runat="server" OnItemCommand="rptrContact_ItemCommand" >
<div ID="itemTemplate>
<ItemTemplate>
<%# Eval("Name") %>
<%# Eval("Email") %>
<asp:LinkButton ID="lbtnEditContact" runat="server" CommandName="Edit" Text="Edit" CommandArgument='<%# Eval("ContactID") %>' />
<asp:Label ID="lblUpdateConfirm" runat="server" Text="Update Confirmed" Visible="false" />
</ItemTemplate>
</div>
<div ID="editTemplate runat="server" visibility="false">
Update your Info:<br>
Name: <asp:TextBox ID="txtName" runat="server Text="<%# Eval("Name") %>"/> <br>
Email: <asp:TextBox ID="txtEmail" runat="server Text="<%# Eval("Email") %>"/><br>
<asp:LinkButton ID="lbtnUpdateContact" CommandArgument='<%# Eval("ContactID") %>' CommandName="UpdateContact" runat="server" >Update</asp:LinkButton>
</div>
</asp:Repeater
and code for ItemCommand:
switch(e.CommandName)
{
case "Edit":
//make editTemplate div visible
HtmlGenericControl divEditContact = (HtmlGenericControl)e.Item.FindControl ("divEditContact");
divEditContact.Visible = true;
break;
case "Update":
Employee updateEmployee = new Employee
{
employeeName = txtName.Text:
employeeEmail = txtEmail.Text:
}
updateEmployee = API.UpdateEmployee(updateEmployee);
//display lblUpdateConfirm visible to True
// so user sees this confirm messge in the newly updated ItemTemplate
}
How can I access my lblUpdateConfirm and turn its Text state to visible from inside the ItemCommand, so that when the user sees the newly updated ITemTemplate, the label is showing the "Update Confirmed" message?
View 1 Replies
Jan 31, 2010
got an example of a repeater inside a repeater (dataBound) code behind?
View 3 Replies