How To Access The Bound DataSource Item In The ListView's DataBound Event
Sep 22, 2010
I know the question has already been posted here but we didn't get to an real solution.I have bound my ListView to an SqlDataSource and I want to write some text in a control present in the view created in the LayoutTemplate depending on some properties of the rows returned.Obviously, I'm using the ItemDataBound event to feed my items but this is not the point.
The spontaneous solution was to bind the ListView.DataBound event and access the raw datasource (a DataTable?) and do the required calculations.I inspected the Items property and, despite it was not empty, the related DataItem property was null.The only work-around I can come to is to execute the calculations in the ItemDataBound event and accumulate the result in some private fields. But it's really ugly to see and makes harder to get some of the required values.
View 1 Replies
Similar Messages:
Jan 19, 2011
have a listview with a list of comments. I would like to add the avatar of the person that posted the comment to each comment. To accomplish this I need to find the ListViewItem find the UserID get the avatar URL and add it to the ListView. I am sure I can do all of this in the ListView Databound event but how?
protected
void ListViewViewComments_DataBound(object sender,
EventArgs e)
{
try
[code]...
View 1 Replies
Sep 1, 2010
Is it possible to access a databound item via a codeblock?For example, I am attempting to add code within an itemTemplate while the current level is not equal to the previous level.
<itemTemplate>
<%
// Need to ensure Container exists in current context
[code]...
View 1 Replies
Jun 4, 2010
I want to access the data that was databound to my list view when handling list view events such as:
protected void List_ItemDataBound(object sender, ListViewItemEventArgs e)
or
protected void List_ItemCommand(object sender, ListViewCommandEventArgs e)
Inside the events, I can not access the data via somthing like Eval("ID")
Currently we are using a very hacky solution:
string id = e.Item.FindControl("lblID").Text;
Where lblID is a hidden control that is populated with data in the aspx file using:
<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' />
My eyes bleed when I look at this, Is there a better way?
View 2 Replies
Mar 21, 2011
I've got an ArrayList bound to a repeater control. In an associated, but separate, area of the page, I'd like to get the first and last item out of the bound control. It's actually a paging element to a table.
Here is the code for the Repeater:
this.Repeater1.DataSource = pagingArray;<br>
this.Repeater1.DataBind();<br>
<asp:Repeater id="Repeater1" runat="server"><br>
<ItemTemplate><br>
<a href="/?page=<%# Container.DataItem %>"><%# Container.DataItem %?</a><br>
</ItemTemplate><br>
</asp:Repeater><br>
I'd like to get the first element from this repeater and display it. The code that I have right now (that doesn't work) is:
<% Response.Write(Repeater1.Items[0].ToString()); %>
View 1 Replies
Jun 28, 2010
last year I inherited a webapplication that seems to refuse to run on a new hosting company's servers due to a "security violation"... Our old host was bought out and now sucks...So I uploaded the code to the new company - looking forward to some sleep and found that my life was about to get more complex.. I go the good old generic security error
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object
The biggest issue was that it didn't say where the error was.. Digging deeper (taking the code appart one block a time) the error was being triggered by the followin itemdatabound event. My host says it is because they are running under medium trust, but I am not seeing why this block should cause issues. Any help very much appreciated.
Sub dlstAlsoDish_ItemDataBound(ByVal s
As
Object,
ByVal e
As DataListItemEventArgs)
Handles dlstAlsoDish.ItemDataBound
If e.Item.ItemType = ListItemType.Item
Or e.Item.ItemType = ListItemType.AlternatingItem
Then
Dim lngDateType
As
Long = e.Item.DataItem("dateType")Dim
strEvent As
String =
"> " & e.Item.DataItem("restName") &
" :: " & e.Item.DataItem("eventName") &
" : "
Dim lnkAlsoEvent
As HyperLink = e.Item.FindControl("lnkAlsoEvent")Dim dtmStart
As DateTime = e.Item.DataItem("eventSrt")Dim dtmEnd
As DateTime = e.Item.DataItem("eventEnd")If lngDateType = 1
Then
strEvent = strEvent & Format(dtmStart, "MMM")ElseIf lngDateType = 2
Then
strEvent = strEvent & Format(dtmStart, "dd MMM") &
" TO " & Format(DateAdd(DateInterval.Day, -1, dtmEnd),
"dd MMM")Else
strEvent = strEvent & Format(dtmStart,"dd MMM")End
If
lnkAlsoEvent.Text = strEvent
lnkAlsoEvent.NavigateUrl = e.Item.DataItem("restURL") &
"/events.aspx#e" & e.Item.DataItem("eventID")ElseIf e.Item.ItemType = ListItemType.Header
Then
imgBorder.ImageUrl = strImageURLDim imgBorder
As Image = e.Item.FindControl("imgBorder")End
If
End
Sub
View 3 Replies
Jul 22, 2010
This was a pretty disappointing moment - when databinding, using Eval("Contact.LastName") would work. It nicely evaluates the related Linq object's member LastName. If the "Contact" object is null, no error is thrown... instead the field is simply null.
However, the same does not hold for sorting - if there exists a null entry (this object does not have a Contact) then the LinqDataSource throws a NullReferenceException. This means that, if you ever have nulls on your foreign-key objects, you can't use sorting headers in the ListView.
This makes the feature moderately useless - I have to roll my own properties for every single field I'd ever want to sort on. That's insane.
View 1 Replies
Jan 13, 2010
I have 2 pages (let's say one is a.aspx and the other one is b.aspx). In the b.aspx, there is a nested listview control (let's say outer listview and inner listview).Therefore, there is an event on databound for the outer listview. so basically, the event will programmatically bind the datasource for the inner listview.
Now, in a.aspx there is a button to open a new window (with unique window name) b.aspx. The very first time click on the button, a.aspx opens a new window for b.aspx without triggering the databound event. However, the second click and so on will trigger the databound event which is causing an error because there is no data yet in the outer listview.My question is, what could have possibly triggered the databound event while there is no data in the listview?
View 3 Replies
Mar 16, 2010
I just started working with LinqDataSources and I was wondering how you retrieve values in a FormView DataBound Event.
With an ObjectDataSource I believe you can grab them like:
[Code]....
Is there a similar way to acheive this with a LinqDataSource?
View 4 Replies
Jul 22, 2010
I wanted to get the total row count in a GridView's databound event handler, so I tried the following:
protected void grid_DataBound(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
DataSet data = grid.DataSource as DataSet;
if (data == null)
return;
int totalRows = data.Tables[0].Rows.Count;
}
The problem is that the grid.DataSource property is null. The DataSourceID property is not null, so does that mean that I can't access the DataSource object in the DataBound event handler unless I assign the DataSource property directly?
Edit1: Here is the code in my GridHelper class for adding rowcount to the BottomPagerRow. I would like to get rid of the requirement to pass in the ObjectDataSource, but can't because I need to use the Selected event to get total row count. Hence the reason for the question. I also think this might be better in a custom control where I can access ViewState, and/or create child controls during the Init event (I still have a problem to resolve with the way the pager renders with an extra cell), but then I'd still have the problem of how to get to the total row count when the DataSource itself doesn't appear to be available in any GridView events.
Edit 2: Not really relevant to the specific problem, but I resolved the problem I was having with the pager rendering so i've updated the code posted. I found the trick here: [URL]
#region Fields
private int totalRows = -1;
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="GridHelper"/> class.
/// Adds EventHandlers to the GridView to display results from the ObjectDataSource in the footer.
/// Marked as obsolete because AddResultsToFooter method provides a static access to the same functionality
/// An instance of GridHelper is required by the passed in GridView to store the totalRows value between the two event handlers
/// </summary>
/// <param name="grid">The grid.</param>
/// <param name="source">The ObjectDataSource linked to the GridView.</param>
[Obsolete("Use AddResultsToFooter instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public GridHelper(GridView grid, ObjectDataSource source)
{
source.Selected += source_Selected;
grid.PreRender += grid_PreRender;
}
#endregion
#region Event Handlers
private void grid_PreRender(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
if (grid.HeaderRow != null)
grid.HeaderRow.TableSection = TableRowSection.TableHeader;
//Add a cell to the bottom pager row to display the total results
if (grid.BottomPagerRow == null || !grid.BottomPagerRow.Visible)
return;
//Get the control used to render the pager
//http://michaelmerrell.com/2010/01/dynamically-modifying-the-asp-net-gridview-paging-control/
Table tblPager = grid.BottomPagerRow.Cells[0].Controls[0] as Table;
if (tblPager == null)
return;
if (totalRows < 0)
{
//The DataSource has not been refreshed so get totalRows from round trip to client
addResultsToPagerTable(tblPager, grid.Attributes["results"]);
return;
}
int firstRow = grid.PageIndex * grid.PageSize + 1;
int lastRow = firstRow + grid.Rows.Count - 1;
string results;
if (totalRows <= grid.PageSize)
results = string.Format("<span class='grid-pager'>{0} Results</span>", totalRows);
else
results = string.Format("Results <b>{0}</b> to <b>{1}</b> of <b>{2}</b>", firstRow, lastRow, totalRows);
addResultsToPagerTable(tblPager, results);
//Need to store the information somewhere that is persisted via ViewState, and we don't have access to ViewState here
grid.Attributes.Add("results", results);
}
/// <summary>
/// Handles the Selected event of the source control. Gets the total rows, since it is not possible to access them from the GridView.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs"/> instance containing the event data.</param>
private void source_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.ReturnValue is DataView)
totalRows = ((DataView)e.ReturnValue).Count;
else if (e.ReturnValue is EntitySet)
totalRows = ((EntitySet)e.ReturnValue).Count;
}
#endregion
#region Private Methods
private static void addResultsToPagerTable(Table tblPager, string results)
{
//http://michaelmerrell.com/2010/01/dynamically-modifying-the-asp-net-gridview-paging-control/
//Get a handle to the original pager row
TableRow pagesTableRow = tblPager.Rows[0];
//Add enough cells to make the pager row bigger than the label we're adding
while (pagesTableRow.Cells.Count < 10)
pagesTableRow.Cells.Add(new TableCell { BorderStyle = BorderStyle.None });
//Add a new cell in a new row to the table
TableRow newTableRow = new TableRow();
newTableRow.Cells.AddAt(0, new TableCell
{
Text = results,
BorderStyle = BorderStyle.None,
ColumnSpan = pagesTableRow.Cells.Count
});
tblPager.Rows.AddAt(0, newTableRow);
}
#endregion
#region Public Methods
/// <summary>
/// Adds EventHandlers to the GridView to display results from the ObjectDataSource in the footer.
/// </summary>
/// <param name="grid">The GridView.</param>
/// <param name="source">The ObjectDataSource linked to the GridView.</param>
public static void AddResultsToFooter(GridView grid, ObjectDataSource source)
{
if (grid == null)
throw new ArgumentNullException("grid", "grid is null.");
if (source == null)
throw new ArgumentNullException("source", "source is null.");
new GridHelper(grid, source);
}
#endregion
View 1 Replies
Aug 31, 2010
Using a listview control for the first time... I need a button for each item, and of course I need to handle the click event for the buttons... upon clicking a particular button I of course need to know which item the button is associated with so the appropriate action can be taken...
In VS, I can't select the button and see my list of available events in the properties window like is normally done for controls outside of templates like this... what do I need to do?
View 3 Replies
Apr 2, 2011
I am trying to implement a nested user control in listview and the user control doesn't get bound.
Here is my code.
[Code]....
View 1 Replies
Apr 27, 2010
I have a collection of objects I bind to a Listview like this:
if (!IsPostBack)
{
List<Equipment> persons = new List<Equipment>
{new Equipment{ItemName = "Sworn", ItemCount = 7, ItemCost = 255}, [code]....
I want to Add/update/delete from this object collection and submit the final data object collection to the BL when the user saves... Rather than just delete/add/update everytime a row is changed.So my question is how do I maintain state for that datasource? I have tried this (delete example)
protected void lvMain_ItemCommand(object sender, ListViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Delete":
{[code]....
But it does nothing. I can't rebind it to the datasrouce because at this point the datasource is null.. I assume the listview keeps its own view state which contains the data?... I guess worse case I can always hold the Object Collection in a Session object.. ..
View 1 Replies
Feb 1, 2010
How do you avoid duplicate bound items in this scenario: There's a databound control on a page (a DropDownList in this case, though I don't think it matters). It has AppendDataBoundItems set to "true". Somewhere in the code, a DataSource is set and DataBind is called. So this control is bound explicitly. You have a bunch of other things to bind on the page, so you call Page.DataBind.
Your databound control now has duplicate items in it. It was (1) bound explicitly, then (2) Page.DataBind bound it again. Since AppendDataBoundItems was true, the second bind appends to the first, and you end up with double the items. A couple limitations: The explicit call to DataBind on the control is done through some centralized code, and would be painful to change. i really need to bind the rest of the page in aggregate (via Page.Databind()) because there's too many other databound elements to do it individually without writing a ton of individual calls.
I need a method like... Page.DataBindExceptIfTheyHaveAlreadyBeenBoundDuh()
View 2 Replies
Mar 11, 2010
How can I access RowDataBound(...) event of child grid. I want to change the background color of the cell in the child grid based on the value.
I have Master/Slave GrisViews (or you can say Parent/Child GridViews). I am populating Child GidView in Parent's RowDataBound (..) event, as follows
[Code]....
In child grid, I have to calculate some values to dislay in the footer row of the child grid.
The following DataBound event focan I accessr te child grid is throwing an error "The name 'ChildGrid' does not exist in the current context"
[Code]....
Here is the ParentGrid with ChildGrid
[Code]....
View 7 Replies
Jul 6, 2010
i need to get data-bound items from outer listview to display in inner Listview, in this scenario:
[code]....
Where the higlighted text mean the title for outer datasource.
View 3 Replies
Sep 7, 2010
i am new in ListView Control. I have a List view to show shopping products. in each data Item i put a link-button for "Add to cart" button. in my scenario clicking on this button causes ShoppingCart.Instance.AddItem("Product GUID") to call. how can i perform that?
i set CommandName="Select" in Link Button and performed this:
[code]....
View 1 Replies
Mar 5, 2010
I'm using VS2008. When a dataset is bound to the DataSource of a ListView, SelectedIndexChanged event does not fire. If I used DataSourceID instead, it has no problem. But SelectedIndexChanging event fires for both.
why and how I can get SelectedIndexChanged event fired when DataSource is used?
View 9 Replies
Aug 9, 2010
I have a listview set up in "flow" mode where the existing records are all on an extended page so you can scroll down to any record.
The InsertItem Template is in the first position, making it easy to insert a new record.
And one can scroll down the page to any record, click the edit button and update that record -- nice having everything on one scrollable page.
I am running into a problem with validations. I have validation controls restricting inputs for all the textboxes on the Insert Item template. They work fine. And on Item Inserted I am running a page validation:
Page.Validate()
If Not Page.IsValid Then
e.Cancel = True
End If
which works fine also.
The problem occurs when I scroll down to an existing record, and go to edit it. I have all the same validation constraints on the textboxes for the EditItemTemplate as I have on the InsertItemTemplate. But I cannot successfully do a page validation on updating the record. The code I am using on update is:
Protected Sub LVRentals_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) Handles LVRentals.ItemUpdating
Page.Validate()
If Not Page.IsValid Then
e.Cancel = True
End If
End Sub
This results in a Cancel even if there are no validation errors on the InsertItemTemplate because the Page.Validate() seems to be causing the InsertItemTemplate to think its fields should be filled out also.
Here is the code for a typical entry of the InsertItem Template:
[code]....
All the controls in the Edit Item template are part of ValidationGroup "edit1" and those of the InsertItem Template are part of ValidationGroup "edit2"
How can I get around receiving validation errors on the InsertItem Template when I am trying to validate just the EditItemTemplate when both are present on the page?
View 2 Replies
Apr 4, 2011
I have a ListView with many advanced controls and html tags. ListView is bound to collection of profiles when first profile in collection is current profile. current profile has few differences from other profiles ie. flash embed, js and some other stuff. I can access inside of my ListView Container.DataIndex property which gives me 0 as first item in index but i'm unable to use inline If statements like so
<% If Container.DataIndex = 0 Then %>
do stuff
<% EndIf %>
this is because i must place pound to access databound item but neither this
<%# If Container.DataIndex = 0 Then %>
do stuff
<% EndIf %>
How can i make inline If ?
View 2 Replies
Dec 1, 2010
I have a ListView with a template, it puts a bunch of data in, like X Y Z.
I want to hide show some columns based on criteria, so I have ItemDataBound event, but I don't know how to get the actual listview row so I can do things to do it.
View 1 Replies
Oct 5, 2010
I want a javascript on a databound row to act on another control in the same row - show/hide for example. The classic ASP approach was to number the controls (usually by rowIndex so that they're easier to reference. I am wondering is there a way to do this in ASP.Net without writing any item command code?
So for html to render as follows
<div onClick='actOnX0'> <span id=x0>i am x0</span></div>
<div onClick='actOnX1'> <span id=x1>i am x1</span></div>
<div onClick='actOnX2'> <span id=x1>i am x2</span></div>
Can I insert the numbers using a databound property that returns say the rowIndex / item index of the current row?
View 2 Replies
Jul 29, 2010
I am working on setting up an aspx page using access datasource in web eepression. Access Datasource is having image source information from other resources feed. I am using listview to display all the images.
The problem I am facing is that all the images are displaying in different sizes. I tried to customize Layout template by specifying the td height and width but it's not working. Is there any way to autosize the pictures in listview once page is displayed.
<LayoutTemplate>
<table runat="server">
<tr runat="server">
[code]...
View 3 Replies
Jun 23, 2010
I have to set a LinkButton's OnClientClick attribute but I don't know what this value is until the LinkButton is bound to. I'm trying to set the value when the repeater binds, but I can't workout how to get the 'boundItem/dataContext' value.
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:LinkButton Text="HelloWorld" ID="Hyper1" runat="server" OnDataBinding="Repeater1_DataBinding" >
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
var list = new List<TestObject>();
list.Add(new TestObject() {TestValue = "testing1"});
list.Add(new TestObject() { TestValue = "testing2" });
list.Add(new TestObject() { TestValue = "testing3" });
this.Repeater1.DataSource = list;
this.Repeater1.DataBind();
}
public void Repeater1_DataBinding(object sender, EventArgs e)
{
var link = sender as HyperLink;
//link.DataItem ???
}
Is there anyway to find out what the current rows bound item is?
View 3 Replies
Aug 20, 2010
I have a label in a template control i want to make have the addition of two databinder items
something like:<%#DataBinder.Eval(Container.DataItem, "something1") + DataBinder.Eval(Container.DataItem, "something2") %>'
but the addition doesn't seem to work - is this possible with some other syntax?
View 6 Replies