zoukankan      html  css  js  c++  java
  • OnBubbleEvent冒泡事件奇怪的问题

    今天没事试着写写控件,没想到碰到一个奇怪问题

    public class myListView : CompositeDataBoundControl,INamingContainer 
        {
             private int editIndex = -1;
            [Category("Default"), DefaultValue(-1)]
            public int EditIndex
            {
                get { return editIndex; }
                set { editIndex = value; }
            }
    
            //public int EditIndex
            //{
            //    get
            //    {
            //        if (ViewState["EditIndex"] == null)
            //        {
            //            return -1;
            //        }
            //        return (int)ViewState["EditIndex"];
            //    }
            //    set { ViewState["EditIndex"] = value; }
            //}
    
            #region 模板
            private ITemplate itemTemplate;
            [TemplateContainer(typeof(myListViewItem)), PersistenceMode(PersistenceMode.InnerProperty)]
            public ITemplate ItemTemplate
            {
                get { return itemTemplate; }
                set { itemTemplate = value; }
            }
    
            private ITemplate editTemplate;
            [TemplateContainer(typeof(myListViewItem), BindingDirection.TwoWay), PersistenceMode(PersistenceMode.InnerProperty)]
            public ITemplate EditTemplate
            {
                get { return editTemplate; }
                set { editTemplate = value; }
            }
            #endregion
    
            protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
            {
                int index = 0;
                if (dataBinding)
                {
    
                }
                if (ItemTemplate != null)
                {
                    Controls.Clear();
                    foreach (object dataItem in dataSource)
                    {
                        myListViewItem myItem = new myListViewItem(dataItem, index, index);
                        if (EditIndex == index)
                        {
                            if (EditTemplate != null)
                            {
                                EditTemplate.InstantiateIn(myItem);
                            }
                        }
                        else
                        {                      
                            ItemTemplate.InstantiateIn(myItem);
                        }
                        index++;
                        Controls.Add(myItem);
                    }
                }
                DataBind(false);
                ChildControlsCreated = true;
                return index;
            }
    
            protected override HtmlTextWriterTag TagKey
            {
                get
                {
                    return HtmlTextWriterTag.Ul;
                }
            }
    
            protected override bool OnBubbleEvent(object source, EventArgs args)
            {
                bool handle = false;
                if (args is CommandEventArgs)
                {
                    CommandEventArgs myargs = args as CommandEventArgs;
                    switch (myargs.CommandName.ToUpper())
                    {
                        case "EDIT":
                            EditIndex = int.Parse( myargs.CommandArgument.ToString());
                            RequiresDataBinding = true;
                            handle=true;
                            break;
                        case "UPDATE":
                            break;
                        case "CANCEL":
                            EditIndex = -1;
                            RequiresDataBinding = true;
                            handle = true;
                            break;
                        default:
                            break;
                    }
                }
                return handle;
            }
        }
    
    [ToolboxItem(false)]
        public  class myListViewItem:WebControl,INamingContainer,IDataItemContainer
        {
            private object dataItem;
            private int dataIndex;
            private int index;
    
    
            public myListViewItem()
            {
    
            }
    
            public myListViewItem(object dataItem, int dataIndex, int index)
            {
                this.dataItem = dataItem;
                this.dataIndex = dataIndex;
                this.index = index;
            }
    
            #region IDataItemContainer 成员
    
            public object DataItem
            {
                get { return dataItem; }
            }
    
            public int DataItemIndex
            {
                get { return dataIndex; }
            }
    
            public int DisplayIndex
            {
                get { return index; }
            }
    
            #endregion
    
    
            protected override HtmlTextWriterTag TagKey
            {
                get
                {
                    return HtmlTextWriterTag.Li;
                }
            }
    
            protected override bool OnBubbleEvent(object source, EventArgs args)
            {
                if (source is IButtonControl)
                {
                    CommandEventArgs e = args as CommandEventArgs;
                    if (e != null)
                    {
                        CommandEventArgs myargs = new CommandEventArgs(e.CommandName, this.dataIndex.ToString());
                        base.RaiseBubbleEvent(this, myargs);
                        return true;
                    }
                }
                return false;
            }
        }
    
    
    
    源代码:
     <lv:myListView ID="myList" runat="server" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    uid:
                    <asp:Label ID="uidLabel" runat="server" Text='<%# Eval("uid") %>'></asp:Label><br />
                    username:
                    <asp:Label ID="usernameLabel" runat="server" Text='<%# Bind("username") %>'></asp:Label><br />
                    nickname:
                    <asp:Label ID="nicknameLabel" runat="server" Text='<%# Bind("nickname") %>'></asp:Label><br />
                    <asp:LinkButton ID="EditButton" runat="server"  CommandName="Edit"
                        Text="编辑">
                    </asp:LinkButton>
                </ItemTemplate>
                <EditTemplate>
                    uid:
                    <asp:Label ID="uidLabel1" runat="server" Text='<%# Eval("uid") %>'></asp:Label><br />
                    username:
                    <asp:TextBox ID="usernameTextBox" runat="server" Text='<%# Bind("username") %>'></asp:TextBox><br />
                    nickname:
                    <asp:TextBox ID="nicknameTextBox" runat="server" Text='<%# Bind("nickname") %>'></asp:TextBox><br />
                    <asp:Button ID="aa" runat="server" Text="update"  CommandName="update"/>
                   <asp:Button ID="bb" runat="server" Text="cancel"  CommandName="cancel"/>
                </EditTemplate>
            </lv:myListView>
    
    
    
    
    
    当没有EditIndex属性没有加viewstate时,cancel和update都不会调用OnBubbleEvent事件,
    EditIndex属性加了viewstate时,cancel和update会调用OnBubbleEvent事件

  • 相关阅读:
    Git和SourceTree配合使用
    hive中数据存储格式对比:textfile,parquent,orc,thrift,avro,protubuf
    hive 实现类似 contain 包含查询
    hive函数 parse_url的使用
    Spring中注解方式的默认beanName生成规则
    @Autowired 与@Resource的区别
    js通过html的url获取参数值
    mysql模糊查询多个字段
    java获取调用当前方法的方法名和行数
    阿里druid数据源配置及数据库密码加密
  • 原文地址:https://www.cnblogs.com/jonhson/p/1887089.html
Copyright © 2011-2022 走看看