Creating LinkButtons in a Repeater ... in code.

W

Wozza

Hi,
I'm trying to create a variable number of LinkButtons using an ItemTemplate
within a Repeater control. This is being done from code ...

I am trying to recreate something similar to the following ... which is in a
user control, only I'm doing it in a web part:
<ul id="middlenavigationMenu" runat="server">
<asp:Repeater ID="rptContractList" runat="server"
OnItemCommand="rptContractList_ItemCommand">
<ItemTemplate>
<li id="middlenavigationMenuListItem" runat="server">
<asp:LinkButton ID="lkbContractList" runat="server"
PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CommandArgument")
%>'>
</asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>

THE ISSUE is. that when the web page is being rendered, the <%# bits don't
do anything ... they seem to be rendered as tezt (in the html page) and
therefore ignored in the page output ...
the end result is that although I get some listitems ... there is no
LinkButton???

Where am I going wrong ... ???

thanks
Wozza

=====

My code is below:


protected override void CreateChildControls()
{
....
// Test LinkButton !!!
linkButtonRepeater = new Repeater();
linkButtonRepeater.ItemTemplate = new
LinkButtonItemTemplate(ListItemType.Item);
HtmlGenericControl linkButtonUl = new HtmlGenericControl(@"ul");
linkButtonUl.Controls.Add(linkButtonRepeater);
this.placeHolderTop.Controls.Add(linkButtonUl);
// Test LinkButton !!!
....
}


protected override void Render(HtmlTextWriter writer)
{
....
// Test LinkButton !!!
DataTable dt = new DataTable();
// Define the columns of the table.
dt.Columns.Add(new DataColumn("PostBackUrl", typeof(String)));
dt.Columns.Add(new DataColumn("Text", typeof(String)));
dt.Columns.Add(new DataColumn("CommandName", typeof(String)));
dt.Columns.Add(new DataColumn("CommandArgument", typeof(String)));
DataRow dr;
dr = dt.NewRow();
dr[0] = @"http://www.google.com";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = @"http://www.bbc.co.uk";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
DataView dv = new DataView(dt);
linkButtonRepeater.DataSource = dv;
linkButtonRepeater.DataBind();
linkButtonRepeater.ItemCommand += new
RepeaterCommandEventHandler(linkButtonRepeater_ItemCommand);
// Test LinkButton !!!
....
}


namespace TestWebPart
{
/// <summary>
/// <example>
///<ItemTemplate>
/// <asp:LinkButton runat="server" ID="xxx" PostBackUrl="Default.aspx"
/// Text='<%# DataBinder.Eval(Container.DataItem, "TextNameField") %>'
/// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgumentField") %>'
/// >
/// </asp:LinkButton>
///</ItemTemplate>
/// </example>
/// </summary>
public class LinkButtonItemTemplate : ITemplate
{
static int itemcount = 0;
static string controlNamePrefix = Guid.NewGuid().ToString();
ListItemType templateType;
public LinkButtonItemTemplate(ListItemType type)
{
templateType = type;
}

// <asp:LinkButton ID="linkButtonList" runat="server"
// PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
// Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
// CommandName='<%# DataBinder.Eval(Container.DataItem, "CommandName") %>'>
// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
// </asp:LinkButton>
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
case ListItemType.Item:
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl='<%# DataBinder.Eval(Container.DataItem, ""PostBackUrl"")
%>'"
+ @" Text='<%# DataBinder.Eval(Container.DataItem, ""Text"") %>'"
+ @" CommandName='<%# DataBinder.Eval(Container.DataItem, ""CommandName"")
%>'"
+ @" CommandArgument='<%# DataBinder.Eval(Container.DataItem,
""CommandArgument"") %>'"
+ @">{0}{1}</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl=""HTTP://www.bbc.co.uk"""
+ @">BBC</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
break;
case ListItemType.AlternatingItem:
lc.Text = "<TR><TD bgcolor=lightblue>Item number: " + itemcount.ToString() +
"</TD></TR>";
break;
case ListItemType.Footer:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
}
container.Controls.Add(lc);
itemcount += 1;
}
}
}
 
M

Mark Fitzpatrick

I always create an ItemDataBound event so I can do it in codebehind. It
seems to be the best way. All I do in that case is, within the itemdatabound
event, I fetch the linkbutton like so:

LinkButton lkbContractList =
(LinkButton)e.Item.FindControl("lkbContractList");

You can get the datarecord that holds the data as well using the
e.Item.DataItem property and casting it to a DbDataRecord like so:

DbDataRecord dr = (DbDataRecord)e.Item.DataItem;

You can then set any properties you want without problem. Of course, you
have to time things correctly and ensure that the function that populates
the repeater is done early enough so that you have items to tie the postback
events to. If you're using PostBackUrl though I'm not sure if it will
matter, but it's something to be careful of.


--

Hope this helps,
Mark Fitzpatrick
Former Microsoft FrontPage MVP 199?-2006



Wozza said:
Hi,
I'm trying to create a variable number of LinkButtons using an
ItemTemplate within a Repeater control. This is being done from code ...

I am trying to recreate something similar to the following ... which is in
a user control, only I'm doing it in a web part:
<ul id="middlenavigationMenu" runat="server">
<asp:Repeater ID="rptContractList" runat="server"
OnItemCommand="rptContractList_ItemCommand">
<ItemTemplate>
<li id="middlenavigationMenuListItem" runat="server">
<asp:LinkButton ID="lkbContractList" runat="server"
PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
</asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>

THE ISSUE is. that when the web page is being rendered, the <%# bits don't
do anything ... they seem to be rendered as tezt (in the html page) and
therefore ignored in the page output ...
the end result is that although I get some listitems ... there is no
LinkButton???

Where am I going wrong ... ???

thanks
Wozza

=====

My code is below:


protected override void CreateChildControls()
{
...
// Test LinkButton !!!
linkButtonRepeater = new Repeater();
linkButtonRepeater.ItemTemplate = new
LinkButtonItemTemplate(ListItemType.Item);
HtmlGenericControl linkButtonUl = new HtmlGenericControl(@"ul");
linkButtonUl.Controls.Add(linkButtonRepeater);
this.placeHolderTop.Controls.Add(linkButtonUl);
// Test LinkButton !!!
...
}


protected override void Render(HtmlTextWriter writer)
{
...
// Test LinkButton !!!
DataTable dt = new DataTable();
// Define the columns of the table.
dt.Columns.Add(new DataColumn("PostBackUrl", typeof(String)));
dt.Columns.Add(new DataColumn("Text", typeof(String)));
dt.Columns.Add(new DataColumn("CommandName", typeof(String)));
dt.Columns.Add(new DataColumn("CommandArgument", typeof(String)));
DataRow dr;
dr = dt.NewRow();
dr[0] = @"http://www.google.com";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = @"http://www.bbc.co.uk";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
DataView dv = new DataView(dt);
linkButtonRepeater.DataSource = dv;
linkButtonRepeater.DataBind();
linkButtonRepeater.ItemCommand += new
RepeaterCommandEventHandler(linkButtonRepeater_ItemCommand);
// Test LinkButton !!!
...
}


namespace TestWebPart
{
/// <summary>
/// <example>
///<ItemTemplate>
/// <asp:LinkButton runat="server" ID="xxx" PostBackUrl="Default.aspx"
/// Text='<%# DataBinder.Eval(Container.DataItem, "TextNameField") %>'
/// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgumentField") %>'
/// >
/// </asp:LinkButton>
///</ItemTemplate>
/// </example>
/// </summary>
public class LinkButtonItemTemplate : ITemplate
{
static int itemcount = 0;
static string controlNamePrefix = Guid.NewGuid().ToString();
ListItemType templateType;
public LinkButtonItemTemplate(ListItemType type)
{
templateType = type;
}

// <asp:LinkButton ID="linkButtonList" runat="server"
// PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
// Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
// CommandName='<%# DataBinder.Eval(Container.DataItem, "CommandName")
%>'>
// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
// </asp:LinkButton>
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
throw new ArgumentException(@"This template type is not designed for use
in a header.");
break;
case ListItemType.Item:
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl='<%# DataBinder.Eval(Container.DataItem, ""PostBackUrl"")
%>'"
+ @" Text='<%# DataBinder.Eval(Container.DataItem, ""Text"") %>'"
+ @" CommandName='<%# DataBinder.Eval(Container.DataItem, ""CommandName"")
%>'"
+ @" CommandArgument='<%# DataBinder.Eval(Container.DataItem,
""CommandArgument"") %>'"
+ @">{0}{1}</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl=""HTTP://www.bbc.co.uk"""
+ @">BBC</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
break;
case ListItemType.AlternatingItem:
lc.Text = "<TR><TD bgcolor=lightblue>Item number: " + itemcount.ToString()
+ "</TD></TR>";
break;
case ListItemType.Footer:
throw new ArgumentException(@"This template type is not designed for use
in a header.");
break;
}
container.Controls.Add(lc);
itemcount += 1;
}
}
}
 
B

Brennan Stehling

Wozza,

When you see the bindings are not firing it could be that the data was
already bound before you placed that text or it does not know that it
should data bind. What you can try is adding this line after you have
defined all of those data bind placeholders...

DataBind();

Perhaps place it in a Load handler as everything else will be happening
in Init or before that. Just be sure to do it after the data is
loaded.

It should look at the current context for items to process data
binding.

More Info:
http://msdn2.microsoft.com/en-us/library/system.web.ui.control.databind.aspx

Brennan Stehling
http://brennan.offwhite.net/blog/
Hi,
I'm trying to create a variable number of LinkButtons using an ItemTemplate
within a Repeater control. This is being done from code ...

I am trying to recreate something similar to the following ... which is in a
user control, only I'm doing it in a web part:
<ul id="middlenavigationMenu" runat="server">
<asp:Repeater ID="rptContractList" runat="server"
OnItemCommand="rptContractList_ItemCommand">
<ItemTemplate>
<li id="middlenavigationMenuListItem" runat="server">
<asp:LinkButton ID="lkbContractList" runat="server"
PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CommandArgument")
%>'>
</asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>

THE ISSUE is. that when the web page is being rendered, the <%# bits don't
do anything ... they seem to be rendered as tezt (in the html page) and
therefore ignored in the page output ...
the end result is that although I get some listitems ... there is no
LinkButton???

Where am I going wrong ... ???

thanks
Wozza

=====

My code is below:


protected override void CreateChildControls()
{
...
// Test LinkButton !!!
linkButtonRepeater = new Repeater();
linkButtonRepeater.ItemTemplate = new
LinkButtonItemTemplate(ListItemType.Item);
HtmlGenericControl linkButtonUl = new HtmlGenericControl(@"ul");
linkButtonUl.Controls.Add(linkButtonRepeater);
this.placeHolderTop.Controls.Add(linkButtonUl);
// Test LinkButton !!!
...
}


protected override void Render(HtmlTextWriter writer)
{
...
// Test LinkButton !!!
DataTable dt = new DataTable();
// Define the columns of the table.
dt.Columns.Add(new DataColumn("PostBackUrl", typeof(String)));
dt.Columns.Add(new DataColumn("Text", typeof(String)));
dt.Columns.Add(new DataColumn("CommandName", typeof(String)));
dt.Columns.Add(new DataColumn("CommandArgument", typeof(String)));
DataRow dr;
dr = dt.NewRow();
dr[0] = @"http://www.google.com";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = @"http://www.bbc.co.uk";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
DataView dv = new DataView(dt);
linkButtonRepeater.DataSource = dv;
linkButtonRepeater.DataBind();
linkButtonRepeater.ItemCommand += new
RepeaterCommandEventHandler(linkButtonRepeater_ItemCommand);
// Test LinkButton !!!
...
}


namespace TestWebPart
{
/// <summary>
/// <example>
///<ItemTemplate>
/// <asp:LinkButton runat="server" ID="xxx" PostBackUrl="Default.aspx"
/// Text='<%# DataBinder.Eval(Container.DataItem, "TextNameField") %>'
/// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgumentField") %>'
/// >
/// </asp:LinkButton>
///</ItemTemplate>
/// </example>
/// </summary>
public class LinkButtonItemTemplate : ITemplate
{
static int itemcount = 0;
static string controlNamePrefix = Guid.NewGuid().ToString();
ListItemType templateType;
public LinkButtonItemTemplate(ListItemType type)
{
templateType = type;
}

// <asp:LinkButton ID="linkButtonList" runat="server"
// PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
// Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
// CommandName='<%# DataBinder.Eval(Container.DataItem, "CommandName") %>'>
// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
// </asp:LinkButton>
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
case ListItemType.Item:
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl='<%# DataBinder.Eval(Container.DataItem, ""PostBackUrl"")
%>'"
+ @" Text='<%# DataBinder.Eval(Container.DataItem, ""Text"") %>'"
+ @" CommandName='<%# DataBinder.Eval(Container.DataItem, ""CommandName"")
%>'"
+ @" CommandArgument='<%# DataBinder.Eval(Container.DataItem,
""CommandArgument"") %>'"
+ @">{0}{1}</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl=""HTTP://www.bbc.co.uk"""
+ @">BBC</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
break;
case ListItemType.AlternatingItem:
lc.Text = "<TR><TD bgcolor=lightblue>Item number: " + itemcount.ToString() +
"</TD></TR>";
break;
case ListItemType.Footer:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
}
container.Controls.Add(lc);
itemcount += 1;
}
}
}
 
W

Wozza

OK ... thanks for the suggestions guys ... ... I managed to find a really
good article about this ...

my code changes revolved around implementing the DataBind on the LinkButton
control that is added to the repeater ...

See:
http://msdn.microsoft.com/msdnmag/issues/02/01/cutting/ and
http://msdn.microsoft.com/msdnmag/issues/05/06/CuttingEdge/

Code that worked ...

public void InstantiateIn(System.Web.UI.Control container)
{
HtmlGenericControl linkButtonTemplate = new HtmlGenericControl(@"li");
linkButtonTemplate.ID = String.Format(@"lit{0}{1}", controlNamePrefix,
itemcount);
switch (templateType)
{
case ListItemType.Header:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
case ListItemType.Item:
case ListItemType.AlternatingItem:
LinkButton linkButton = new LinkButton();
linkButton.ID = String.Format(@"lbn{0}{1}", controlNamePrefix, itemcount);
linkButton.DataBinding += new EventHandler(linkButton_DataBinding);
linkButtonTemplate.Controls.Add(linkButton);
break;
case ListItemType.Footer:
throw new ArgumentException(@"This template type is not designed for use in
a header.");
break;
}
container.Controls.Add(linkButtonTemplate);
itemcount += 1;
}
void linkButton_DataBinding(object sender, EventArgs e)
{
LinkButton linkButton = (LinkButton)sender;
RepeaterItem container = (RepeaterItem)linkButton.NamingContainer;
linkButton.Text = (string)DataBinder.GetPropertyValue(container.DataItem,
"Text", "{0:d}");
linkButton.PostBackUrl =
(string)DataBinder.GetPropertyValue(container.DataItem, "PostBackUrl",
"{0:d}");
//linkButton.CommandName =
(string)DataBinder.GetPropertyValue(container.DataItem, "CommandName",
"{0:d}");
//linkButton.CommandArgument =
(string)DataBinder.GetPropertyValue(container.DataItem, "CommandArgument",
"{0:d}");
}

Wozza said:
Hi,
I'm trying to create a variable number of LinkButtons using an
ItemTemplate within a Repeater control. This is being done from code ...

I am trying to recreate something similar to the following ... which is in
a user control, only I'm doing it in a web part:
<ul id="middlenavigationMenu" runat="server">
<asp:Repeater ID="rptContractList" runat="server"
OnItemCommand="rptContractList_ItemCommand">
<ItemTemplate>
<li id="middlenavigationMenuListItem" runat="server">
<asp:LinkButton ID="lkbContractList" runat="server"
PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
</asp:LinkButton>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>

THE ISSUE is. that when the web page is being rendered, the <%# bits don't
do anything ... they seem to be rendered as tezt (in the html page) and
therefore ignored in the page output ...
the end result is that although I get some listitems ... there is no
LinkButton???

Where am I going wrong ... ???

thanks
Wozza

=====

My code is below:


protected override void CreateChildControls()
{
...
// Test LinkButton !!!
linkButtonRepeater = new Repeater();
linkButtonRepeater.ItemTemplate = new
LinkButtonItemTemplate(ListItemType.Item);
HtmlGenericControl linkButtonUl = new HtmlGenericControl(@"ul");
linkButtonUl.Controls.Add(linkButtonRepeater);
this.placeHolderTop.Controls.Add(linkButtonUl);
// Test LinkButton !!!
...
}


protected override void Render(HtmlTextWriter writer)
{
...
// Test LinkButton !!!
DataTable dt = new DataTable();
// Define the columns of the table.
dt.Columns.Add(new DataColumn("PostBackUrl", typeof(String)));
dt.Columns.Add(new DataColumn("Text", typeof(String)));
dt.Columns.Add(new DataColumn("CommandName", typeof(String)));
dt.Columns.Add(new DataColumn("CommandArgument", typeof(String)));
DataRow dr;
dr = dt.NewRow();
dr[0] = @"http://www.google.com";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = @"http://www.bbc.co.uk";
dr[1] = @"!!! PRESS ME !!!";
dr[2] = @"XXX";
dr[3] = @"http://linkupv2.external/pages/productpicker.aspx";
dt.Rows.Add(dr);
DataView dv = new DataView(dt);
linkButtonRepeater.DataSource = dv;
linkButtonRepeater.DataBind();
linkButtonRepeater.ItemCommand += new
RepeaterCommandEventHandler(linkButtonRepeater_ItemCommand);
// Test LinkButton !!!
...
}


namespace TestWebPart
{
/// <summary>
/// <example>
///<ItemTemplate>
/// <asp:LinkButton runat="server" ID="xxx" PostBackUrl="Default.aspx"
/// Text='<%# DataBinder.Eval(Container.DataItem, "TextNameField") %>'
/// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgumentField") %>'
/// >
/// </asp:LinkButton>
///</ItemTemplate>
/// </example>
/// </summary>
public class LinkButtonItemTemplate : ITemplate
{
static int itemcount = 0;
static string controlNamePrefix = Guid.NewGuid().ToString();
ListItemType templateType;
public LinkButtonItemTemplate(ListItemType type)
{
templateType = type;
}

// <asp:LinkButton ID="linkButtonList" runat="server"
// PostBackUrl='<%# DataBinder.Eval(Container.DataItem, "PostBackUrl") %>'
// Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
// CommandName='<%# DataBinder.Eval(Container.DataItem, "CommandName")
%>'>
// CommandArgument='<%# DataBinder.Eval(Container.DataItem,
"CommandArgument") %>'>
// </asp:LinkButton>
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
throw new ArgumentException(@"This template type is not designed for use
in a header.");
break;
case ListItemType.Item:
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl='<%# DataBinder.Eval(Container.DataItem, ""PostBackUrl"")
%>'"
+ @" Text='<%# DataBinder.Eval(Container.DataItem, ""Text"") %>'"
+ @" CommandName='<%# DataBinder.Eval(Container.DataItem, ""CommandName"")
%>'"
+ @" CommandArgument='<%# DataBinder.Eval(Container.DataItem,
""CommandArgument"") %>'"
+ @">{0}{1}</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
lc.Text = String.Format
(
@"<li id=""li{0}{1}"" runat=""server"">"
+ @"<asp:LinkButton runat=""server"" ID=""{0}{1}"""
+ @" PostBackUrl=""HTTP://www.bbc.co.uk"""
+ @">BBC</asp:LinkButton>"
+ @"</li>"
, controlNamePrefix
, itemcount
);
break;
case ListItemType.AlternatingItem:
lc.Text = "<TR><TD bgcolor=lightblue>Item number: " + itemcount.ToString()
+ "</TD></TR>";
break;
case ListItemType.Footer:
throw new ArgumentException(@"This template type is not designed for use
in a header.");
break;
}
container.Controls.Add(lc);
itemcount += 1;
}
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top