예제 #1
0
        void ControlTreeDataLoader.LoadData()
        {
            CssClass = CssClass.ConcatenateWithSpace(CssElementCreator.CssClass);
            if (isStandard)
            {
                CssClass = CssClass.ConcatenateWithSpace("ewfStandard");
            }

            var visibleItems = items.Select(i => Tuple.Create(i.Item1(), i.Item2));

            visibleItems = visibleItems.ToArray();

            var itemControls = visibleItems.Select(
                i => {
                var np = new NamingPlaceholder(getItemControl(i), updateRegionSets: i.Item1.UpdateRegionSets);
                if (i.Item1.Id != null)
                {
                    np.ID = i.Item1.Id;
                }
                return(np);
            });

            itemControls = itemControls.ToArray();

            Controls.Add(new NamingPlaceholder(itemControls));

            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "tail",
                    from region in tailUpdateRegions
                    let staticItemCount = items.Count() - region.UpdatingItemCount
                                          select new PreModificationUpdateRegion(region.Sets, () => itemControls.Skip(staticItemCount), staticItemCount.ToString),
                    arg => itemControls.Skip(int.Parse(arg))));

            var itemControlsById =
                itemControls.Select((control, index) => new { visibleItems.ElementAt(index).Item1.Id, control })
                .Where(i => i.Id != null)
                .ToDictionary(i => i.Id, i => i.control);

            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "add",
                    from region in itemInsertionUpdateRegions
                    select
                    new PreModificationUpdateRegion(
                        region.Sets,
                        () => new Control[0],
                        () => StringTools.ConcatenateWithDelimiter(",", region.NewItemIdGetter().ToArray())),
                    arg => arg.Separate(",", false).Where(itemControlsById.ContainsKey).Select(i => itemControlsById[i] as Control)));

            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "remove",
                    visibleItems.Select(
                        (item, index) =>
                        new PreModificationUpdateRegion(item.Item1.RemovalUpdateRegionSets, () => itemControls.ElementAt(index).ToSingleElementArray(), () => "")),
                    arg => new Control[0]));
        }
        void ControlTreeDataLoader.LoadData()
        {
            CssClass = CssClass.ConcatenateWithSpace( CssElementCreator.CssClass );
            if( isStandard )
                CssClass = CssClass.ConcatenateWithSpace( "ewfStandard" );

            var visibleItems = items.Select( i => Tuple.Create( i.Item1(), i.Item2 ) );
            visibleItems = visibleItems.ToArray();

            var itemControls = visibleItems.Select(
                i => {
                    var np = new NamingPlaceholder( getItemControl( i ), updateRegionSets: i.Item1.UpdateRegionSets );
                    if( i.Item1.Id != null )
                        np.ID = i.Item1.Id;
                    return np;
                } );
            itemControls = itemControls.ToArray();

            Controls.Add( new NamingPlaceholder( itemControls ) );

            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "tail",
                    from region in tailUpdateRegions
                    let staticItemCount = items.Count() - region.UpdatingItemCount
                    select new PreModificationUpdateRegion( region.Sets, () => itemControls.Skip( staticItemCount ), staticItemCount.ToString ),
                    arg => itemControls.Skip( int.Parse( arg ) ) ) );

            var itemControlsById =
                itemControls.Select( ( control, index ) => new { visibleItems.ElementAt( index ).Item1.Id, control } )
                    .Where( i => i.Id != null )
                    .ToDictionary( i => i.Id, i => i.control );
            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "add",
                    from region in itemInsertionUpdateRegions
                    select
                        new PreModificationUpdateRegion(
                        region.Sets,
                        () => new Control[ 0 ],
                        () => StringTools.ConcatenateWithDelimiter( ",", region.NewItemIdGetter().ToArray() ) ),
                    arg => arg.Separate( ",", false ).Where( itemControlsById.ContainsKey ).Select( i => itemControlsById[ i ] as Control ) ) );

            EwfPage.Instance.AddUpdateRegionLinker(
                new UpdateRegionLinker(
                    this,
                    "remove",
                    visibleItems.Select(
                        ( item, index ) =>
                        new PreModificationUpdateRegion( item.Item1.RemovalUpdateRegionSets, () => itemControls.ElementAt( index ).ToSingleElementArray(), () => "" ) ),
                    arg => new Control[ 0 ] ) );
        }