formatting repeater data in markup

hi there,
hope someone can help here, im trying to use a repeater although Im not sure the correct way to format the data within the markup.  Simple example below.  My repeater that creates a hyperlink for each record I have from the database.  The repeater creates a list of links with the url address and the text link being the same.

                                <asp:Repeater ID="test" runat="server">
                                    <ItemTemplate>
                                        <li><a href="<%# Container.DataItem %>" /><%# Container.DataItem %>
                                            </a> </li>
                                    </ItemTemplate>
                                </asp:Repeater>

This is fine normally but I want to change the format of the data for the url address.

to create html like this

<ul>
<li><a href="hello_there">hello there</a>
<li><a href="hello_again">hello again</a>
<li><a href="hello_today">hello today</a>
<li><a href="hello_to">hello to</a>
</ul>


im not sure whether I should be formatting the data in the code behind file or within the markup file?  

Is it possible for the below:

  <li><a href="<%# Replace(" ","_",Container.DataItem) %>" /><%# Container.DataItem %>
</a> </li>

or can I format the dataitem in the code behind file?

Many thanks,

jimbona27Asked:
Who is Participating?
 
SammyConnect With a Mentor Commented:
You can use the Repeater's ItemDataBound event to do the formating in run time
its well documented on MSDN
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

Good luck
Sammy
0
 
jimbona27Author Commented:
im getting an error referring to this is not possible because of the repeater protection level?  any thoughts?  thanks
0
 
jimbona27Author Commented:
the error refers to the markup where I have added the onitembound event attribute within the repeater markup
0
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

 
SammyCommented:
Can you post the code?
cs and aspx please
0
 
jimbona27Author Commented:
thanks, will do when I can..
0
 
jimbona27Author Commented:
ok backup now,
markup code:

                            <ul>
                                <asp:Repeater ID="test" OnDataBinding="test_ItemDataBound" runat="server">
                                    <ItemTemplate>
                                        <li><a href="/<%# Container.DataItem %>/" />
                                            <%# Container.DataItem %>
                                            </a></li>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ul>


code behind:


    protected void test_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        Response.Write("s");
    }


0
 
jimbona27Author Commented:
i get an error referring to the markup repeater line:
no overload for test_itemdatabound matches delegate system.eventhandler.
0
 
jimbona27Author Commented:
got it working now although im stuck with the following:


        if (e.Item.ItemType == ListItemType.Item)
        {
         /// replace spaces with underscores..
        }

using the following markup I get an error referring to the name does not exist...

<%# DataBinder.Eval(Container.DataItem, "name") %>
0
 
jimbona27Author Commented:
ok...............
got around it,
using

is this an okay way of doing it or is the on data bind event a better approach?

        DataTable dt = new DataTable();
        DataRow dr;

        // Define the columns of the table.
        dt.Columns.Add(new DataColumn("name", typeof(String)));
        dt.Columns.Add(new DataColumn("url", typeof(String)));

        // execute query
        System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
        conn.ConnectionString = @"...";
        conn.Open();
        OleDbDataReader reader = null;
        OleDbCommand cmd = new OleDbCommand("SELECT top 10 * FROM type", conn);
        reader = cmd.ExecuteReader();

        int counter = 0;
        string test= string.Empty;

        // populate datatable with DB info
        while (reader.Read())
        {
            test= (string)reader["Name"];
            dr = dt.NewRow();
            dr[0] = test;
            dr[1] = test.Replace(" ", "-");
            dt.Rows.Add(dr);
            counter++;
        }

        // bind data
        DataList1.DataSource = dt;
        DataList1.DataBind();

markup...

 <asp:DataList ID="DataList1" runat="server">
                                <ItemTemplate>
                                        <li><a href="x/<%# DataBinder.Eval(Container.DataItem, "url") %>/" />
                                            <%# DataBinder.Eval(Container.DataItem, "name") %></a></li>
                                    </ItemTemplate></asp:DataList>
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.