根据表头和表体变化的数据单元的视图,在报表产生过程中,由程序根据表头、表左部、表体三个数据 集合生成。
Beispiel #1
0
        //生成表体部分
        private void UpdateTableBody()
        {
            //把原来产生的单元格清除掉
            foreach (FrameworkElement ui in _bodyElements)
            {
                grid.Children.Remove(ui);
            }
            _bodyElements.Clear();

            int i1 = 0;

            //把单元格插入表格中,行号及列号添加头及左部所占单元格
            foreach (object header in TableHeaderItems)
            {
                int j = 0;
                foreach (object left in TableLeftItems)
                {
                    Grid ui = (Grid)TableBodyTemplate.LoadContent();
                    //每个单元格的数据上下文一样,插入特殊的数据实体
                    DataObjectsView view = new DataObjectsView()
                    {
                        Row = left, Col = header, Objects = TableBodyItems
                    };
                    //表体模板由多个单元格组成
                    List <UIElement> cells = new List <UIElement>(ui.Children);
                    ui.Children.Clear();
                    foreach (FrameworkElement cell in cells)
                    {
                        cell.DataContext = view;
                        //用边框把内容框起来
                        Border b = new Border();
                        b.Child           = cell;
                        b.BorderThickness = new Thickness(1, 1, 1, 1);
                        b.BorderBrush     = new SolidColorBrush(Colors.Black);
                        //单元格所在行为 整个头部所占行 + 单元格行号 * 每个单元格行总数E:\workspace3.5\restV2\s2\s2\App.xaml
                        Grid.SetRow(b, Grid.GetRow(cell) + _headRow + j * ui.RowDefinitions.Count);
                        //单元格所占列为 整个左边所占列 + 单元格列号 * 每个单元格列总数
                        Grid.SetColumn(b, Grid.GetColumn(cell) + _leftCol + i1 * ui.ColumnDefinitions.Count);
                        Grid.SetRowSpan(b, Grid.GetRowSpan(ui));
                        Grid.SetColumnSpan(b, Grid.GetColumnSpan(ui));
                        grid.Children.Add(b);
                        _bodyElements.Add(b);
                    }
                    j++;
                }
                i1++;
            }
        }
Beispiel #2
0
        //生成表尾部分
        private void UpdateTableTail()
        {
            //把原来产生的单元格清除掉
            foreach (FrameworkElement ui in _tailElements)
            {
                grid.Children.Remove(ui);
            }
            _tailElements.Clear();

            int i1 = 0;
            //把单元格插入表格中,行号及列号添加头及左部所占单元格
            foreach (object header in TableHeaderItems)
            {
                Grid ui = (Grid)TailTemplate.LoadContent();
                //每个单元格的数据上下文一样,插入特殊的数据实体
                DataObjectsView view = new DataObjectsView() { Col = header, Objects = TableBodyItems };
                //表体模板由多个单元格组成
                List<UIElement> cells = new List<UIElement>(ui.Children);
                ui.Children.Clear();
                foreach (FrameworkElement cell in cells)
                {
                    cell.DataContext = view;
                    //用边框把内容框起来
                    Border b = new Border();
                    b.Child = cell;
                    b.BorderThickness = new Thickness(1, 1, 1, 1);
                    b.BorderBrush = new SolidColorBrush(Colors.Black);
                    //单元格所在行为 整个头部所占行 + 表左部所占行
                    Grid.SetRow(b, Grid.GetRow(cell) + _headRow + _row);
                    //单元格所占列为 整个左边所占列 + 单元格列号 * 每个单元格列总数
                    Grid.SetColumn(b, Grid.GetColumn(cell) + _leftCol + i1 * ui.ColumnDefinitions.Count);
                    Grid.SetRowSpan(b, Grid.GetRowSpan(ui));
                    Grid.SetColumnSpan(b, Grid.GetColumnSpan(ui));
                    grid.Children.Add(b);
                    _bodyElements.Add(b);
                }
                i1++;
            }
        }