Repeater 动态 模板列

最近看了几个动态添加模板列的例子,自己也做一个,下面是代码:

页面代码:

View Code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="TestRepeater.Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script type="text/javascript" language="javascript">
        function checkall(obj) {
            var table = document.getElementById("tableitem");
            var rows = table.rows.length;
            var colums = table.rows[0].cells.length;
            var check = obj.checked;
            for (var i = 1; i < rows; i++) {
                var ctl = "";
                if (i < 10)
                    ctl = "ctl0" + i.toString();
                else
                    ctl = "ctl" + i.toString();
                var cbid = obj.id.replace("ctl00", ctl);
                var cb = document.getElementById(cbid);
                if (cb != null && cb.type == "checkbox")
                    cb.checked = check;
            }
        }
        function check(obj) {
            var table = document.getElementById("tableitem");
            var rows = table.rows.length;
            var colums = table.rows[0].cells.length;
            var check = obj.checked;
            var arr = obj.id.split("_");
            var ctl = "";
            for (var i = 0; i < arr.length; i++) {
                if (i == (arr.length - 2))
                    ctl += "_ctl00";
                else {
                    if (i == 0)
                        ctl = arr[i]; else
                        ctl += "_" + arr[i];
                }
            }
            var cbid = document.getElementById(ctl);
            if (cbid != null && cbid.type == "checkbox")
                cbid.checked = false;
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button runat="server" ID="btn" Text="确定" />
        <table width="98%" border="1" style="border: 1px solid #000000" cellpadding="0" cellspacing="0"
            id="tableitem">
            <asp:Repeater runat="server" ID="Repeater1">
            </asp:Repeater>
            <asp:Repeater runat="server" ID="Repeater2">
                <ItemTemplate>
                    <tr>
                        <td>
                            <%#Eval("stuid") %>
                        </td>
                        <td>
                            <%#Eval("stuname") %>
                        </td>
                        <td>
                            <%#Eval("studepid") %>
                        </td>
                        <td>
                            <asp:Button runat="server" ID="Button1" Text="确定" />
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table>
    </div>
    </form>
</body>
</html>

 

后台代码:

View Code
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

namespace TestRepeater
{
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = GetDataTable();
                Repeater1.DataSource = dt;
                Repeater1.DataBind();
                Repeater2.DataSource = dt;
                Repeater2.DataBind();
            }
            btn.Click += new EventHandler(btn_Click);
        }

        void btn_Click(object sender, EventArgs e)
        {
            DataTable dt = GetDataTable();
            Repeater1.DataSource = dt;
            Repeater1.DataBind();
        }

        override protected void OnInit(EventArgs e)
        {
            // 
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 
            // 
            DataTable dt = GetDataTable();
            List<string> idlist = new List<string>();
            List<string> namelist = new List<string>();
            foreach (DataColumn dc in dt.Columns)
            {
                idlist.Add(dc.ToString());
                namelist.Add(dc.ToString());
            }
            WorkFlowTraceTemplate header = new WorkFlowTraceTemplate(ListItemType.Header, idlist, namelist);
            WorkFlowTraceTemplate item = new WorkFlowTraceTemplate(ListItemType.Item, idlist, namelist);
            item.ButtonCommd += new CommandEventHandler(item_ButtonCommd);
            Repeater1.HeaderTemplate = header;
            Repeater1.ItemTemplate = item;
            base.OnInit(e);
        }

        void item_ButtonCommd(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "btnOk")
                this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", string.Format("<script>alert('{0}')</script>", e.CommandArgument.ToString()));
            DataTable dt = GetDataTable();
            Repeater1.DataSource = dt;
            Repeater1.DataBind();
        }

        private DataTable GetDataTable()
        {
            //表dep:depid(标识主键),depname(学院名字) 
            //表stu:stuid(标识主键),stuname(学生名字),studepid(学院id=表dep.depid)
            DataTable stu = new DataTable();
            DataColumn dc1 = new DataColumn("stuid", typeof(int));
            DataColumn dc2 = new DataColumn("stuname", typeof(string));
            DataColumn dc3 = new DataColumn("studepid", typeof(int));
            stu.Columns.Add(dc1);
            stu.Columns.Add(dc2);
            stu.Columns.Add(dc3);
            for (int i = 0; i < 2; i++)
            {
                DataRow dr1 = stu.NewRow();
                dr1["stuid"] = 1;
                dr1["stuname"] = "1";
                dr1["studepid"] = 1;
                DataRow dr2 = stu.NewRow();
                dr2["stuid"] = 2;
                dr2["stuname"] = "2";
                dr2["studepid"] = 2;
                DataRow dr3 = stu.NewRow();
                dr3["stuid"] = 3;
                dr3["stuname"] = "3";
                dr3["studepid"] = 3;
                DataRow dr4 = stu.NewRow();
                dr4["stuid"] = 4;
                dr4["stuname"] = "4";
                dr4["studepid"] = 4;

                stu.Rows.Add(dr1);
                stu.Rows.Add(dr2);
                stu.Rows.Add(dr3);
                stu.Rows.Add(dr4);
            }
            return stu;
        }
    }

    public class WorkFlowTraceTemplate : ITemplate
    {
        public event CommandEventHandler ButtonCommd;
        ListItemType templateType;
        private List<string> ids;
        private List<string> names;
        public WorkFlowTraceTemplate(ListItemType type, List<string> ids, List<string> names)
        {
            templateType = type;
            this.ids = ids;
            this.names = names;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            HtmlTableRow hr = new HtmlTableRow();
            switch (templateType)
            {
                case ListItemType.Header:
                    for (int i = 0; i <= ids.Count; i++)
                    {
                        HtmlTableCell hc = new HtmlTableCell();
                        hc.Attributes.Add("Style", "border:1px solid #000000");
                        if (i == ids.Count)
                        {
                            Label lb = new Label();
                            lb.ID = "lb";
                            lb.Text = "操作";
                            hc.Controls.Add(lb);
                        }
                        else
                        {
                            TextBox tb = new TextBox();
                            CheckBox cb = new CheckBox();
                            cb.Attributes.Add("onclick", "checkall(this)");
                            cb.ID = "cb" + ids[i];
                            tb.ID = "tb" + ids[i];
                            tb.Text = names[i];
                            hc.Controls.Add(cb);
                            hc.Controls.Add(tb);
                        }
                        hr.Cells.Add(hc);
                    }
                    container.Controls.Add(hr);
                    break;
                case ListItemType.Item:
                    hr.DataBinding += new EventHandler(hr_DataBinding);
                    container.Controls.Add(hr);
                    break;
            }
        }

        void hr_DataBinding(object sender, EventArgs e)
        {
            HtmlTableRow hr = (HtmlTableRow)sender;
            RepeaterItem container = (RepeaterItem)hr.NamingContainer;
            if (templateType == ListItemType.Item)
            {
                for (int i = 0; i <= ids.Count; i++)
                {
                    HtmlTableCell hc = new HtmlTableCell();
                    hc.Attributes.Add("Style", "border:1px solid #000000");
                    if (i == ids.Count)
                    {
                        Button btn = new Button();
                        btn.ID = "btn";
                        btn.Text = "确定";
                        btn.Command += new CommandEventHandler(btn_Command);
                        btn.CommandArgument = DataBinder.Eval(container.DataItem, names[0]).ToString();
                        btn.CommandName = "btnOk";
                        hc.Controls.Add(btn);
                    }
                    else
                    {
                        TextBox tb = new TextBox();
                        CheckBox cb = new CheckBox();
                        cb.ID = "cb" + ids[i];
                        cb.Attributes.Add("onclick", "check(this)");
                        tb.ID = "tb" + ids[i];
                        tb.Text = DataBinder.Eval(container.DataItem, names[i]).ToString();
                        hc.Controls.Add(cb);
                        hc.Controls.Add(tb);
                    }
                    hr.Cells.Add(hc);
                }
            }
        }

        void btn_Command(object sender, CommandEventArgs e)
        {
            if (ButtonCommd != null)
            {
                ButtonCommd(sender, e);
            }
        }
    }
}

 

 

 

 

转载于:https://www.cnblogs.com/JL1983/archive/2013/03/28/2986967.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值