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事件

  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/jonhson/p/1887089.html
Copyright © 2011-2022 走看看