• ext.net报表布局


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

    关于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秒了,所以在用户进入这个页面的时候给了提示“亲,先去喝杯茶吧,马上就好~”。

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

      

      

  • 相关阅读:
    HDU 2717 Catch That Cow
    补题列表
    Codeforces 862C 异或!
    HDU 2084
    HDU 2037
    Codeforces 492B
    POJ 2262
    Codeforces 1037A
    HDU 1276
    itertools — Functions creating iterators for efficient looping
  • 原文地址:https://www.cnblogs.com/hellosnowy/p/2664585.html
Copyright © 2020-2023  润新知