public void Dispose_SiteEventHandler_InvokesEventHandlerAndRemovesSiteFromComponent()
        {
            bool calledDisposed = false;
            var  site           = new Site();
            var  component      = new MarshalByValueComponent()
            {
                Site = site
            };

            component.Disposed += (sender, e) =>
            {
                Assert.Same(component, sender);
                Assert.Same(EventArgs.Empty, e);
                calledDisposed = true;
            };

            Assert.False(calledDisposed);
            site.Container.Add(component);
            component.Dispose();
            Assert.True(calledDisposed);
            Assert.Empty(site.Container.Components);

            // Call multiple times.
            component.Site = site;
            site.Container = null;
            calledDisposed = false;
            component.Dispose();
            Assert.True(calledDisposed);
        }
        public void ToString_WithSite_ReturnsExpected()
        {
            var component = new MarshalByValueComponent()
            {
                Site = new Site()
            };

            Assert.Equal("name [System.ComponentModel.MarshalByValueComponent]", component.ToString());
        }
        public void Disposed_AddRemoveEventHandler_Success()
        {
            bool calledDisposedHandler = false;

            void Handler(object sender, EventArgs e) => calledDisposedHandler = true;

            var component = new MarshalByValueComponent();

            component.Disposed += Handler;
            component.Disposed -= Handler;

            component.Dispose();
            Assert.False(calledDisposedHandler);
        }
        /// <summary>
        /// 绑定显示数据的控件
        /// </summary>
        /// <param name="control">显示数据的控件</param>
        /// <param name="dt">数据源,目前只支持DataTable和DataSet</param>
        private void DataBind(Control control, MarshalByValueComponent dt)
        {
            if (control == null)
            {
                return;
            }

            //为什么没有一个统一的DataSource呢?
            //GridView等
            var tmpBaseDataBoundControl = control as BaseDataBoundControl;

            if (tmpBaseDataBoundControl != null)
            {
                tmpBaseDataBoundControl.DataSource = dt;
                tmpBaseDataBoundControl.DataBind();
                return;
            }

            //Repeater
            var tmpRepeater = control as Repeater;

            if (tmpRepeater != null)
            {
                tmpRepeater.DataSource = dt;
                tmpRepeater.DataBind();
                return;
            }

            //DataGrid、DataList
            var tmpBaseDataList = control as BaseDataList;

            if (tmpBaseDataList != null)
            {
                tmpBaseDataList.DataSource = dt;
                tmpBaseDataList.DataBind();
            }

            //不在判断范围内,退出
        }
        public void ToString_NoSite_ReturnsExpected()
        {
            var component = new MarshalByValueComponent();

            Assert.Equal("System.ComponentModel.MarshalByValueComponent", component.ToString());
        }