自定义Web控件(简单的Repeater数据绑定)

现在在学习服务器控件开发,感觉有的难度,比WinForm的难的多。

今天自己做了一个简单的Repeater控件,当然不是很好,像vs2003自己的Repeater有好HeadTempLate  和ItemTempLate 和FootTempLate 三项模板,我自己做的只有一项,那就是 ItemTemp,也只能做简单的数据绑定,废话也不多说了,还是请各位网友看看源代码吧,

 

using  System;
using  System.Web;
using  System.Web.UI;
using  System.Collections;

namespace  WebControlLib.CH7
{
    
/// <summary>
    
/// 简单的数据绑定控件
    
/// </summary>

    [PersistChildren(true)]
    
public class SimpleRepeater:Control,INamingContainer
    
{
        
private ITemplate _template = null;
        
private ICollection _datasource = null;

        
public ICollection DataSource
        
{
            
get
            
{
                
return this._datasource;
            }

            
set
            
{
                
this._datasource = value;
            }

        }

        [TemplateContainer(
typeof(RepeaterItem))]
        
public ITemplate ItemTempLate
        
{
            
get
            
{
                
return this._template;
            }

            
set
            
{
                
this._template = value;
            }

        }


        
protected override void AddParsedSubObject(object obj)
        
{
            
base.AddParsedSubObject (obj);
        }


        
protected override void CreateChildControls()
        
{
            
object obj = ViewState["NumData"];
            
this.Controls.Clear();
            
if(obj!=null)
            
{
                
int num = Convert.ToInt32(obj);
                
for(int i=0;i<num;i++)
                
{
                    RepeaterItem pi  
=new RepeaterItem(i,null);
                    _template.InstantiateIn(pi);
                    
this.Controls.Add(pi);
                }

            }

        }


        
protected override void OnDataBinding(EventArgs e)
        
{
            
base.OnDataBinding (e);
            
if(DataSource != null)
            
{
                Controls.Clear();
                ClearChildViewState();
                IEnumerator data 
= DataSource.GetEnumerator();
                
int i =0;
                
while(data.MoveNext())
                
{
                    RepeaterItem item 
= new RepeaterItem(i,data.Current);
                    _template.InstantiateIn(item);
                    
this.Controls.Add(item);
                    i
++;
                }

                ChildControlsCreated 
= true;
                ViewState[
"NumData"]  =i;
                
            }

        }


    }


    
public class RepeaterItem:Control,INamingContainer
    
{
        
private int _index;
        
private object _dataitem;

        
public RepeaterItem(int index, object dataitem)
        
{
            
this._index = index;
            
this._dataitem = dataitem;
        }


        
public int Index
        
{
            
get
            
{
                
return this._index;
            }

        }


        
public object DataItem
        
{
            
get
            
{
                
return this._dataitem;
            }

            
set
            
{
                
this._dataitem =value;
            }

        }

    }

}

 

 

下面是在网页中课户端调用的代码:

 

<% @ Register TagPrefix="ableit" Namespace="WebControlLib.CH4" Assembly="WebControlLib"  %>
<% @ Page language="c#" Codebehind="WebImageDemo.aspx.cs" AutoEventWireup="false" Inherits="WebControlDemo.CH4.WebImageDemo"  %>
<% @ Register TagPrefix="cc1" Namespace="AbleControlsLib" Assembly="WebControlLib"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  >
< HTML >
    
< HEAD >
        
< title > WebImageDemo </ title >
        
< meta  name ="GENERATOR"  Content ="Microsoft Visual Studio .NET 7.1" >
        
< meta  name ="CODE_LANGUAGE"  Content ="C#" >
        
< meta  name ="vs_defaultClientScript"  content ="JavaScript" >
        
< meta  name ="vs_targetSchema"  content ="http://schemas.microsoft.com/intellisense/ie5" >
    
</ HEAD >
    
< body  MS_POSITIONING ="GridLayout" >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< cc1:SimpleRepeater  id ="SimpleRepeater1"  runat ="server" >
                
< ITEMTEMPLATE >
                    
< TABLE  borderColor ="#ff3333"  border ="1" >
                        
< TR >
                            
< TD > <% # Container.DataItem %> </ TD >
                        
</ TR >
                    
</ TABLE >
                
</ ITEMTEMPLATE >
            
</ cc1:SimpleRepeater >
        
</ form >
    
</ body >
</ HTML >

 

下面是服务器代码:

 

using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;

namespace  WebControlDemo.CH4
{
    
/// <summary>
    
/// WebImageDemo 的摘要说明。
    
/// </summary>

    public class WebImageDemo : System.Web.UI.Page
    
{
        
protected AbleControlsLib.SimpleRepeater SimpleRepeater1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
            System.Collections.ArrayList array = new ArrayList();
            array.Add(
"AAA");
            array.Add(
"BBB");
            array.Add(
"CCC");
            array.Add(
"DDD");
            array.Add(
"EEE");
            array.Add(
"FFF");
            array.Add(
"GGG");
            array.Add(
"JJJ");
            array.Add(
"HHH");
            
this.SimpleRepeater1.DataSource = array;
            
this.SimpleRepeater1.DataBind();
        }


        
Web 窗体设计器生成的代码
    }

}

 

因为我用的数据源是ICollection,所以绑定时,也只能是ICollection他派生的数据源;

如果大家有什么意见,请多多指教和留言!!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值