现在的位置: 首页 > 综合 > 正文

ext.net报表布局

2013年04月04日 ⁄ 综合 ⁄ 共 4225字 ⁄ 字号 评论关闭

一直想写个技术类的博文,怎耐技术有限,文采也不佳,所以一直拖到现在才开博客。对于博文应该怎么写,写成什么样还是不怎么懂,所以文章中可能出现一些错别字也会在所难免,技术上也说的不一样就对,权当用来做技术交流吧。

关于ext.net报表的布局参考了 雪雁的博客 Ext.NET之动态绑定GridPanel》,大家也可以去该博客看,毕竟我这也是从他哪里学来的。

首先先来看效果吧。

 

截图没截全的,大概意思就是这么个意思,采用的是ext.net 强大的GridPane, 列是动态一个月的天数,分为2个头的,用来合并2列,ext.net官网的例子也差不多,但看的头大。

下面说说如何实现吧。

前台代码:

 

 <ext:GridPanel ID="GridPanel1" AutoScroll="true" TrackMouseOver="true" runat="server"
        ColumnLines="true" StripeRows="true" AutoHeight="true" Icon="Date" Width="6300">
        <TopBar>
            <ext:Toolbar ID="Toolbar1" runat="server">
                <Items>
                    <ext:Button ID="BtnSchedul" runat="server" Text="生成月排班计划" Icon="CogGo">
                        <Listeners>
                            <Click Fn="BtnSchedul_OnClick" />
                        </Listeners>
                    </ext:Button>
                    <ext:Button ID="btnxls" runat="server" Text="导出Excel" Icon="PageExcel">
                        <Listeners>
                            <Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'xls');" />
                        </Listeners>
                    </ext:Button>
                    <ext:Button ID="Button1" runat="server" Text="打印" Icon="Printer" OnClientClick="window.print();" />
                </Items>
            </ext:Toolbar>
        </TopBar>
        <Store>
            <%--<ext:Store ID="Store1" ShowWarningOnFailure="false" AutoLoad="true" runat="server" />--%>
               <ext:Store ID="Store1" ShowWarningOnFailure="false" AutoLoad="true" runat="server"
                OnSubmitData="Store1_Submit" />
        </Store>
        <LoadMask ShowMask="true" />
        <ColumnModel ID="ctl120" />
        <View>
            <ext:GroupingView ID="gvColumns" runat="server" />
        </View>
    </ext:GridPanel>

 

  后台代码:

 

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                 //获取数据源到DataTable中
                     DataTable   Scheduldt = asdbll.BuildDataTable(Schedulds.Tables[0]);
                        #region 绑定数据
                        BingData(Scheduldt.AsEnumerable().AsDataView(), GridPanel1, Store1);
                        int RuleNum = asdbll.GetAllRule(Schedulds.Tables[0]).Count();
                        GridPanel1.Title = Year.ToString() + "年" + Month.ToString() + "月客运车间排班表";
                        #endregion

                        #region 设置列头
                        if (GridPanel1.ColumnModel.Columns.Count >= 28)
                        {
                            GridPanel1.ColumnModel.Columns[0].Header = "作业区域";
                            for (int i = 0; i < GridPanel1.ColumnModel.Columns.Count - 2; i++)
                            {
                                if (RuleNum == 2)
                                {
                                    GridPanel1.ColumnModel.Columns[i + 1].Header = "白班";
                                    GridPanel1.ColumnModel.Columns[i + 2].Header = "夜班";
                                    GridPanel1.ColumnModel.Columns[i + 1].Align = Alignment.Center;
                                    GridPanel1.ColumnModel.Columns[i + 2].Align = Alignment.Center;
                                }
                                else if (RuleNum == 3)
                                {
                                    GridPanel1.ColumnModel.Columns[i + 1].Header = "早班";
                                    GridPanel1.ColumnModel.Columns[i + 2].Header = "中班";
                                    GridPanel1.ColumnModel.Columns[i + 3].Header = "晚班";
                                    GridPanel1.ColumnModel.Columns[i + 1].Align = Alignment.Center;
                                    GridPanel1.ColumnModel.Columns[i + 2].Align = Alignment.Center;
                                    GridPanel1.ColumnModel.Columns[i + 3].Align = Alignment.Center;
                                }
                                i++;
                            }
                        }

                        #endregion

                        #region 设置合并的列头
                        var _headGroupRow = new HeaderGroupRow()
                        {
                            Columns = { 
                         new HeaderGroupColumn()
                                                {
                                                    Header = "<font class='headRows1'></font>",
                                                    Align = Alignment.Center,
                                                    ColSpan = 1                                                    
                                                }
                    }
                        };

                        for (int i = 1; i <= DateTime.DaysInMonth(Year, Month); i++)
                        {
                            _headGroupRow.Columns.Add(new HeaderGroupColumn()
                            {
                                Header =
                                    string.Format("<font class='headRows2'>{0}</font>",
                                                  Month.ToString() + "月" + i.ToString() + "日"),
                                Align = Alignment.Center,
                                ColSpan = RuleNum
                            });
                        }

                        gvColumns.HeaderGroupRows.Add(_headGroupRow);

                        #endregion
                    
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        #region 生成字段和列,并绑定数据源
        /// <summary>
        /// 生成字段和列,并绑定数据源
        /// </summary>
        /// <param name="_rptData"></param>
        /// <param name="_gp"></param>
        /// <param name="_store"></param>
        private void BingData(System.Data.DataView _rptData, GridPanel _gp, Store _store)
        {
            var _jsonReader = new JsonReader();
            foreach (DataColumn _dataColumn in _rptData.Table.Columns)
            {
                _jsonReader.Fields.Add(new RecordField(_dataColumn.ColumnName));
                //创建列   
                var _column = new Column
                {
                    Header = _dataColumn.ColumnName,
                    DataIndex = _dataColumn.ColumnName,
                };
                _column.Renderer.Args = new string[] { "value" };
                _gp.ColumnModel.Columns.Add(_column);
            }
            _store.Reader.Add(_jsonReader);
            _store.DataSource = _rptData;
            _store.DataBind();
        }
        #endregion

这里说2句吧,BingData方法主要是用来动态绑定数据源到store的,合并列是在Page_Load里写的,

 

   #region 设置合并的列头
                        var _headGroupRow = new HeaderGroupRow()
                        {
                            Columns = { 
                         new HeaderGroupColumn()
                                                {
                                                    Header = "<font class='headRows1'></font>",
                                                    Align = Alignment.Center,
                                                    ColSpan = 1                                                    
                                                }
                    }
                        };

                        for (int i = 1; i <= DateTime.DaysInMonth(Year, Month); i++)
                        {
                            _headGroupRow.Columns.Add(new HeaderGroupColumn()
                            {
                                Header =
                                    string.Format("<font class='headRows2'>{0}</font>",
                                                  Month.ToString() + "月" + i.ToString() + "日"),
                                Align = Alignment.Center,
                                ColSpan = RuleNum
                            });
                        }

                        gvColumns.HeaderGroupRows.Add(_headGroupRow);

                        #endregion

因为这个项目后台数据访问是利用IBatisNet操作数据的,那个速度...还有就是本子也不给力!

一个月的数据显示出来我这里算了下,生成一年的计划花了5秒,数据显示花了10秒,IBatisNet连接访问花了15秒,业务处理花了2秒,加起来快30秒了,所以在用户进入这个页面的时候给了提示“亲,先去喝杯茶吧,马上就好~”。

好吧,写到这里,基本上贴的是代码,主要是不知道写什么好~大家如果看到有什么问题,提出来,大家一起讨论。

 

  

 

  

 

 

抱歉!评论已关闭.