Ask a Question related to ASP.NET Building Controls, Design and Development.
-
Wozza #1
Creating LinkButtons in a Repeater ... in code.
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_Ite mCommand);
// 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;
}
}
}
Wozza Guest
-
DataList with linkbuttons
Can anyone help? I have a DataList with 5 LinkButtons and for some reason my Item_Command event does not get triggered. My code is as follows: ... -
help with rss creating code creating an XML rss feed]
When I run the following code I get the follwing error and cant really see the problem I am incxluding this file from another page thanks in... -
Creating DataGrid Via Code...
Hey all, Been reading up on ASP.NET (using VB.NET) and have been trying to figure out if this is possible. I need to make 4 connections to 4... -
Need to build a repeater purely in code
Hi. I need help adding a repeater to my custom control in code. I have created a custom control that draws a html panel to the screen. I... -
Access in code to repeater control's data
Hi, I am putting a repeater control in an ASP.NET page to show a list of data. All fine. I now want to check the data in one of the data... -
Mark Fitzpatrick #2
Re: Creating LinkButtons in a Repeater ... in code.
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" <warrenroscoe@hotmail.com> wrote in message
news:O1yzUCvGHHA.5104@TK2MSFTNGP03.phx.gbl...> 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_Ite mCommand);
> // 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;
> }
> }
> }
>
Mark Fitzpatrick Guest
-
Brennan Stehling #3
Re: Creating LinkButtons in a Repeater ... in code.
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:
[url]http://msdn2.microsoft.com/en-us/library/system.web.ui.control.databind.aspx[/url]
Brennan Stehling
[url]http://brennan.offwhite.net/blog/[/url]
Wozza wrote:> 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_Ite mCommand);
> // 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;
> }
> }
> }Brennan Stehling Guest
-
Wozza #4
Re: Creating LinkButtons in a Repeater ... in code.
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:
[url]http://msdn.microsoft.com/msdnmag/issues/02/01/cutting/[/url] and
[url]http://msdn.microsoft.com/msdnmag/issues/05/06/CuttingEdge/[/url]
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.Data Item,
"Text", "{0:d}");
linkButton.PostBackUrl =
(string)DataBinder.GetPropertyValue(container.Data Item, "PostBackUrl",
"{0:d}");
//linkButton.CommandName =
(string)DataBinder.GetPropertyValue(container.Data Item, "CommandName",
"{0:d}");
//linkButton.CommandArgument =
(string)DataBinder.GetPropertyValue(container.Data Item, "CommandArgument",
"{0:d}");
}
"Wozza" <warrenroscoe@hotmail.com> wrote in message
news:O1yzUCvGHHA.5104@TK2MSFTNGP03.phx.gbl...> 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_Ite mCommand);
> // 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;
> }
> }
> }
>
Wozza Guest



Reply With Quote

