C# - How To Read An Xml Subnode Into Repeater / How To Get At The DisplayName
Jul 29, 2010I am reading XML using xmlreader, and then binding the xml to a Repeater
Here's the code behind:
[code]....
How to get at the DisplayName?
I am reading XML using xmlreader, and then binding the xml to a Repeater
Here's the code behind:
[code]....
How to get at the DisplayName?
I have a simple application roughly following the nerd dinner tutorial. I am trying to get [DisplayName("Fancy Name")] to pretty up the output from <%= Html.LabelFor(model => model.Booking.Name)%> in my create/edit view. I am using a form view controller which looks like this...
View 3 RepliesGiven the following object
public class CompetitionYear : IValidatableObject{public Guid Id { get; set; } [Display(ResourceType = typeof(Terms), Name = "Description")]public string Description { get; set; } [Display(ResourceType = typeof(Terms), Name = "Startdate")]public DateTime Startdate { get; set; } [Display(ResourceType = typeof(Terms), Name = "Enddate")]public DateTime Enddate { get; set; } }
In a View I want to show a table with in the headers the DisplayName of the respective properties.
The view is like this:
@model IEnumerable<CompetitionYear> @{ ViewBag.Title = "Index";} <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create")</p><table> <tr> <th></th> <th> @Html.LabelFor(m => m.FirstOrDefault().Description) </th> <th> @Html.LabelFor(m => m.FirstOrDefault().Startdate) </th> <th> @Html.LabelFor(m => m.FirstOrDefault().Enddate) </th> </tr> @foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | @Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) </td> <td> @item.Description </td> <td> @String.Format("{0:D}", item.Startdate) </td> <td> @String.Format("{0:D}", item.Enddate) </td> </tr>} </table>
In the headers I want to show the DisplayName of the property. The only way I can get it working is as shown above. It really looks ugly and I can't imagine there isn't a better solution. Is there a better solution and how does it look like?
I got custom attributes to work on the server and client, now I want to DRY things up just a little more. How do you override the pattern for RegularExpressionAttribute to include the DisplayName?
Right now I am like this:
[Code]....
Which results in:
[Code]....
I have my repeater loading in plain text from a database right now e.g.
<td>
<a href="<%# DataBinder.Eval(Container.DataItem, "URL")%>">
<img alt="<%# DataBinder.Eval(Container.DataItem, "AltTag_Thumbnail")%>" src="<%# DataBinder.Eval(Container.DataItem, "URL_Thumbnail")%>" />
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "Name") %>
</td>
My plain texts are image links and pdf URLs from a database table, in groups, in the correct order but I'm not sure how to render them correctly (sample image below shows what I am trying to render)
Is there any way to make a repeater template intelligent enough to render an "image link" OR "pdf link" based off the [type] column returned in the record?
table:
pk
Name
Type (image or pdf)
URL
Description
URL_Thumbnail (if image)
GroupId (associate these records to each other)
OrderNumber (order of these records within their GroupId)
What is the best way to retrieve the display name attribute for an item in your model? I see a lot of people using the LabelFor helper for everything, but a label isn't appropriate if I just want to list the data out. Is there an easy way just get the Name Attribute if I just want to print it out in, say a paragraph?
View 1 RepliesWhy is CultureInfo.DisplayName in [Sami][1] all of a sudden? I use it to display a list of country names. Not a good idea perhaps but it worked until recently and I'm quite sure it was in Swedish (I guess it could have been English.)
View 2 Repliesi would localize the text of DisplayName attribute: i know that at the moment is not possible (i hope that the next version of mvc will do it automatically) so i tried to search how to do it and i found this link:
LINK TO BLOG'S POST
but i didn't understand how to finish the lookup function.
here some informations from the first minutes.
View 7 RepliesSo, I've got an contact form in my MVC 2 application.
I'd like to programatically email all properties of my "ContactModel".
Here is what I'd like to do in psuedo-ish code:
[Code]....
In case it matters...ContactModel sets up the DisplayName attributes like this:
[DisplayName("First Name")]
public string FirstName {get; set ;}
I'd like to keep this nice and DRY by not repeating the DisplayName names.
Specifically, I'd like to enumerate over each property in my ContactModel, get its DisplayName, and get its submitted value.
I have a Car class that I'm trying to display in an MVC 3 view using the WebGrid helper. Below are the Car and it's metadata class.
Car class:
[MetadataType(typeof(CarMetadata))]
public partial class Car
{
// car implementation
}
Car metadata class:
public class CarMetadata
{
[DisplayName("Car Name")]
[StringLength(100, ErrorMessageResourceType = typeof(ValidationText), ErrorMessageResourceName="CarNameDescriptionLength")]
[Required]
public string CarName { get; set; }
}
View contents:
@model List<Car>
...
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 10);
grid.Pager(WebGridPagerModes.NextPrevious);
@grid.GetHtml(
htmlAttributes: new { id = "grid" },
columns: grid.Columns(
grid.Column("CarName", ?????)
));
GOAL: I'd like to figure out how to use the DisplayName data annotation as the column header text in the WebGrid (?????). Does anyone know how this is accomplished?
I'm generating the rdlc at runtime and I'm using LoadReportDefinition(memorystream) to provide the definition to report viewer. It works fine but when I export it to pdf or excel, the file extension comes in as .xls[1] or .pdf[1].
I have tried giving the DisplayName property but it doesn't work.
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>
I have nested a repeater control in Gridview. Right now it is showing gridview rows and repeater header for every case(whether data is there or not for that particular grid view row in the repeater control). I want to hide the gridview row and repeater control header when there is no data present for that particular gridview row. That case I handled at code level by filtering the resulted data table.
Now the another problem I am facing: I have allowed the paging on the gridview i.e. pagesize 3. When page loads it works fine, but when I go to page 2 then it generates following error: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Below is the code to fill the grid, paging and fill repeater on rowdatabound event of grid.
[code].....
Read Receipt And Read Outlook Inbox for the same
View 2 Repliesgot an example of a repeater inside a repeater (dataBound) code behind?
View 3 RepliesI have a user control that displays a shopping cart in an ecommerce application.
The main cart display is a repeater that renders as a html table. In one of those table columns, there is another repeater to display people associated with the products int he cart (it's a repeater in case there is a line item >1 with multiple people).
I've added an ImageButton that I want to use to change the person associated with the item. At first, when I'd click on it I was getting this error:
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
So as an experiment I disabled EventValidation on the page (not the control it's self) and now I do not get an error, but I also do not ever hit the breakpoint I set in the innermost repeater's ItemCommand event.
So I wonder how I might do this without disabling EventValidation, because this control will show up on multiple pages and we don't want to edit them all. Also, I'll need to know not only the repeater containing the control's row that the event came from but also the row index of the repeater containg this one. Is this possible?
I have repeater in which I have 2 hyperlink in the footer of the repeater and I want that the hyperlink can navigate from the page_load
View 2 RepliesI want to bind parent repeater item index in child repeater control using inline code not code behind side.
For example
[Code]....
I am using a repeater to build a custom table. However, I can't figure out how to make the table show subtotal if the next rows tour does not match the previous rows.
Something similar to that.
row1 tour1
row2 tour 1
tour1 subtotal
row3 tour2
row4 tour2
subtotal
total
[code].....
but this shows all the data in the nested repeater not the ones that match the parentrepeater fields for example tour,theme,dep7 should match in the child repeater
I'm so confused I wasn't even sure what to make the title so that it would make sense.
Here is what I have:
[code]...
I have links at the top of the page that are the letters A-Z. What I want to do is click on one of the letters, then show only the div IDs that start with that letter. I can't figure out how to do this since I'm dynamically creating the ID names. I had it set up nicely with Javascript and CSS, but the function call was inside the repeater. The layout is changed now, and I don't understand how to make the div ID available outside the repeater.
I am using Nested Repeater repeater1 and repeater2 in my project . one button is there inside repeater2 but i cant use that button using e.commandname
so how to use that button and how to write code on it.
what changed do I need to make to my code for it to achieve what I'm after.
At the moment I am getting a "cannot cast to type" error message with the below code.
I have also tried calling the ItemDataBound method in with the parent repeater tags and had no errors but when I clicked on the button it would just move back to the top of the page and would not hide or show any data. Also I have made the div style to none but the first record still shows its child but the rest don't.
[code].....
I have set up an asp repeater to go through and display a list of people based on input parameters. Within that repeater I have a repeater that displays specific details about each person. No problem so far.
However, my requirement is that I only display the names, with a plus/minus sign to the left of the name. Clicking on the plus sign will expand that person's information to show the details. Clicking the minus sign will collapse the detail info.
I have a panel set up within my primary repeater that encompasses the secondary repeater.
Here's the beginning of the code:
[Code]....
Edit: I have a working solution already - I would just like to know why my original attempt didn't work. My original attempt is the code below.
I'm using the approach I found here:[URL] 306154 to implement a nested Repeater. Each parent item has one or more children items (the point of having the nested Repeater) with a dropdown horizontally aligned to each child item. In an effort to re-use the nested part of the Repeater I wanted to develop that piece as a user control but couldn't get it to work. I am wondering if it is even possible and if so how?
Here is my user control apsx:
<asp:Repeater ID="NestedRepeater" runat="server">
....
<ItemTemplate>
<tr class="text" id="RepeaterItemRow" runat="server">
<td>
<%#DataBinder.Eval(Container.DataItem, "Name") %>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</ItemTemplate>
And here is my code behind for the user control. I noticed when I debugged NestedDataSource was null even though in the parent page load the data is there:
public DataSet NestedDataSource
{
get;
set;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
NestedRepeater.DataSource = NestedDataSource;
NestedRepeater.DataBind();
}
}
In the parent Repeater in the `<ItemTemplate> I have:
<asp:RepUC ID="NestRep" runat="server" NestedDataSource='<%#((DataRowView)Container.DataItem).Row.GetChildRows("nestedrel") %>'>
And finally the page code behind:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BuildWBS();
}
}
private void BuildPage()
{
DataSet ds = new DataSet();
ds = DataAccessLayer.GetData("System");
ds.Relations.Add("nestedrel", ds.Tables[0].Columns["Id"], ds.Tables[1].Columns["ParentId"]);
ParentRepeater.DataSource = ds;
ParentRepeater.DataBind();
}
The page loads but nothing relating to the repeater appears on the screen. So, can you see anything wrong with what I have? Is the way I tried doing this even possible?