Click here to Skip to main content
13,298,348 members (74,804 online)
Click here to Skip to main content
Add your own
alternative version


5 bookmarked
Posted 10 Oct 2009

Databind Expression in ListView LayoutTemplate

, 10 Oct 2009
Rate this:
Please Sign up or sign in to vote.
Solution for Databind Expression error/not working in ListView LayoutTemplate


This article pretends to show a possible solution for a common problem when developers work with ListView: databind expression (<%# %>) in the LayoutTemplate does not work.

My English is not the best so all suggestions and fixes are welcome. 


Sometime ago I had to face this problem, I google it and found a possible solution: extend ListView class and do the databind in the CreateLayoutTemplate. In my case was not the best solution because we had a lot of code done and change asp listview tag for the new custom listview tag was simply unacceptable.

I don’t want to extend me (because my english) but basically what I did was use Adapaters. I previously worked with css adapters so I used that code like a base. After some research I found that correct adapter for ListView is DataBoundControlAdapter ( in System.Web.UI.WebControls.Adapters namespace). 

public class ListViewAdapter : DataBoundControlAdapter

The next that I had to decide was where and how to do the LayoutTemplate DataBind, the first (and the unique) option that I found was LayoutCreated event. Now, I had‘where’ but left how. Checking the ListView inside handler of LayoutCreated event I found that all databind expressions were removed, also I notice that Listview only had one control (the rendered LayoutTemplate) so the solution was instance in a temporal control the LayoutTemplate and then do the databind to it, after that, remove the current rendered layoutTemplate from listview and replace it by the new databound control. 

void AdaptedControl_LayoutCreated(object sender, EventArgs e)
    ListView lv = AdaptedControl;
    Control template = new Control();
    template.DataBind(); // resolve the problem
    // remove current layout (without databind expressions)
    //add again the layout but with databound content

The last step was add the Broswer file to project and the custom adapter for the listview. 

<adapter controlType="System.Web.UI.WebControls.ListView" adapterType="Adapters.ListViewAdapter" />

And that’s all. Now you can use databind expressions (<%# %>) inside LayoutTemplate (obviously no data from datasource).  


Creation: 10/10/2009 


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Colombia Colombia
No Biography provided

You may also be interested in...

Comments and Discussions

QuestionWhy you need the adapter? Pin
Davidpw23-Oct-10 4:59
memberDavidpw23-Oct-10 4:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.171207.1 | Last Updated 10 Oct 2009
Article Copyright 2009 by dolcalmi
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid