BasicGridView继承自GridView,并为其添加了一个ActionTemplate,里面放一下按钮并让其和翻页一起绘制在gridview的底部.如此调用:
<sgc:BasicGridView ID="gridView" runat="server" AllowSorting="True" AllowPaging="True" AutoGenerateColumns="false" DataKeyNames="Id" OnActionCommand="gridview_ActionCommand" >
<Columns>
   <asp:BoundField DataField="Name" HeaderText="<%$Resources:Resource,Name%>" SortExpression="Name" />
   <asp:BoundField DataField="Description" HeaderText="<%$Resources:Resource,Description%>" SortExpression="Description" />    
</Columns>
   <ActionTemplate>
       <asp:LinkButton ID="btnAdd" runat="server" commandname="add">LinkButton</asp:LinkButton>
   </ActionTemplate>
</sgc:BasicGridView>为处理ActionTemplate中的事件:
在BasicGridView中添加了如下代码:        [
        Browsable(false),
        DefaultValue(null),
        Description("The action controls template."),
        TemplateContainer(typeof(ActionTemplateContainer)),
        PersistenceMode(PersistenceMode.InnerProperty)
        ]
        public ITemplate ActionTemplate
        {
            get { return this._actionTemplate; }
            set { this._actionTemplate = value; }
        }        protected override void RaisePostBackEvent(string eventArgument)
        {
            if (eventArgument.StartsWith("Action$"))
            {
                OnActionCommand(new CommandEventArgs(eventArgument.Substring(eventArgument.IndexOf("$")+1), eventArgument));
                return;
            }
            base.RaisePostBackEvent(eventArgument);
        }
        private static readonly object EventActionCommand = new object();        public event CommandEventHandler ActionCommand
        {
            add { Events.AddHandler(EventActionCommand, value); }
            remove { Events.RemoveHandler(EventActionCommand, value); }
        }        public virtual void OnActionCommand(CommandEventArgs e)
        {
            CommandEventHandler commandHandler = (CommandEventHandler)Events[EventActionCommand];
            if (commandHandler != null)
                commandHandler(this, e);
        }btnAdd客户端产生的代码是
<a id="gridview_btnAdd" href="javascript:__doPostBack(gridview$btnAdd','')">LinkButton</a>我希望btnAdd的客户端代码是
<a id="gridview_btnAdd" href="javascript:__doPostBack(gridview$btnAdd','Action$add')">LinkButton</a>
以便处理
请问这个该如何实现
或者有什么好的其他方法实现类似的功能(及为gridview添加自定义template并处理其内部控件的事件)
请高手指点,谢谢!!!!

解决方案 »

  1.   

    这样用Template是错误的。如果哪个LinkButton的功能属于BasicGridView,那就不应该用Template,而直接创建BasicGridView下属的LinkButton。如果这个区域是一个Template,就意味着由BasicGridView的使用者设计,这就意味着BasicGridView对其的无知以及不依赖,无论Template中出现什么BasicGridView都应该能够让它正常显示。
      

  2.   

    to cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz) 
    那如果要实现类似的功能该如何实现?
      

  3.   

    那么你到底要一个让你的下游开发人员灵活定制的Template区域,还是一个受你直接控制的LinkButton?如果是后者的话,你直接进行this.Control.Add(new LinkButton())啊,当然Add之前你要对LinkButton做很多赋值工作,我这样写仅仅是为了举例。
      

  4.   

    你懂得开发Template控件,也应该懂得简单的复合控件怎么做吧。
      

  5.   

    我需要一个Template,里面可以放任意个LinkButton或者其他得Button,让他显示在gridview得底部(和 分页显示在同一行).当然还能处理LinkButton得Click事件
    复合控件似乎实现不了LinkButton得个数不确定把