ASP.NET Tutorial/Custom Controls/Table
User control: link table
<source lang="csharp">
<%@ Control Language="C#"
AutoEventWireup="true" CodeFile="Control.ascx.cs" Inherits="LinkTable" %>
<asp:label id="lblTitle" Font-Size="Small" Font-Names="Verdana" Font-Bold="True" ForeColor="#C00000" runat="server">[Title Goes Here]</asp:label> |
<asp:datalist id="listContent" runat="server" OnItemCommand="listContent_ItemCommand"> <ItemTemplate> <asp:LinkButton id="HyperLink1" Font-Names="Verdana" Font-Size="XX-Small" ForeColor="#0000cd" runat="server" Text="<%# DataBinder.Eval(Container.DataItem, "Text") %>" CommandArgument="<%# DataBinder.Eval(Container.DataItem, "Url") %>"> </asp:LinkButton> </ItemTemplate></asp:datalist> |
File: Control.ascx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class LinkTable : System.Web.UI.UserControl {
public event LinkClickedEventHandler LinkClicked; public string Title { get { return lblTitle.Text; } set { lblTitle.Text = value; } } public LinkTableItem[] items; public LinkTableItem[] Items { get { return items; } set { items = value; listContent.DataSource = items; listContent.DataBind(); } } public void listContent_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e) { if (LinkClicked != null) { LinkButton link = (LinkButton)e.Item.Controls[1]; LinkTableItem item = new LinkTableItem(link.Text, link.rumandArgument); LinkTableEventArgs args = new LinkTableEventArgs(item); LinkClicked(this, args); if (!args.Cancel) { Response.Redirect(item.Url); } } }
} public class LinkTableItem {
private string text; public string Text { get { return text; } set { text = value; } } private string url; public string Url { get { return url; } set { url = value; } } public LinkTableItem() { } public LinkTableItem(string text, string url) { this.text = text; this.url = url; }
} public class LinkTableEventArgs : EventArgs{
private LinkTableItem selectedItem; public LinkTableItem SelectedItem { get { return selectedItem; } } private bool cancel = false; public bool Cancel { get { return cancel; } set { cancel = value; } } public LinkTableEventArgs(LinkTableItem item) { selectedItem = item; }
} public delegate void LinkClickedEventHandler(object sender,LinkTableEventArgs e);
File: Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="LinkTableHost" %>
<%@ Register Src="Control.ascx" TagName="LinkTable" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server">
<uc1:LinkTable ID="LinkTable1" runat="server" OnLinkClicked="LinkClicked"/>
<asp:Label ID="lblInfo" runat="server"></asp:Label>
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class LinkTableHost : System.Web.UI.Page {
protected void Page_Load(object sender, System.EventArgs e) { LinkTable1.Title = "A List of Links"; LinkTableItem[] items = new LinkTableItem[3]; items[0] = new LinkTableItem("Test Item 1", "http://www.nfex.ru"); items[1] = new LinkTableItem("Test Item 2", "http://www.nfex.ru"); items[2] = new LinkTableItem("Test Item 3", "http://www.nfex.ru"); LinkTable1.Items = items; } public void LinkClicked(object sender, LinkTableEventArgs e) { lblInfo.Text = "You clicked "" + e.SelectedItem.Text + " URL:" + e.SelectedItem.Url + "."; e.Cancel = true; }
}</source>