动态 store grid

private void AddField(Store store, RecordField field)
        {
            if (Ext.IsAjaxRequest)
                store.AddField(field);
            else
                store.Reader.Reader.Fields.Add(field);
        }
        public void LoadGrid(Store store, GridPanel grid, bool testData)
        {
            try
            {
                store.RemoveFields();

                //loop through each column to create the readerfields for the store
                foreach (FundScreenerReportColumn c in this.Columns)
                    this.AddField(store, new RecordField(c.ColumnName, RecordFieldType.Auto));

                //ADD GRID COLUMNS/FILTERS
                Column col = null;
                StringFilter sFilter = null;
                NumericFilter nFilter = null;
                ListFilter lFilter = null;

                this.Columns.Sort(new Comparison<FundScreenerReportColumn>(SortByOrder));
                grid.ColumnModel.Columns.Clear();
                grid.Plugins.Clear();
                //create Grid Filter
                GridFilters f = new GridFilters();
                grid.Plugins.Add(f);
                foreach (FundScreenerReportColumn c in this.Columns)
                {
                    col = new Column();
                    col.ColumnID = c.ColumnName;
                    col.Header = c.ColumnName;

                    col.Sortable = true;

                    if (c.DataType.Contains("date"))
                    {
                        col.Renderer.Fn = string.Format("Ext.util.Format.dateRenderer('{0}')", c.DisplayFormat);
                    }
                    if (c.DataType.Contains("float"))
                    {
                        col.Renderer.Fn = string.Format("Ext.util.Format.numberRenderer('{0}')", c.DisplayFormat);
                    }
                    if (c.ColumnName.ToLower().Contains("icon"))
                        col.Renderer.Fn = "getImage";

                    col.DataIndex = c.ColumnName;

                    grid.ColumnModel.Columns.Add(col);
            


                    //add appropriate filter
                    if (c.FilterGrid.Equals("Numeric"))
                    {
                        nFilter = new NumericFilter();
                        nFilter.DataIndex = c.ColumnName;
                        f.Filters.Add(nFilter);
                    }
                    else if (c.FilterGrid.Equals("List"))
                    {
                        lFilter = new ListFilter();
                        lFilter.DataIndex = c.ColumnName;
                        lFilter.Options = c.FilterGridValues.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        f.Filters.Add(lFilter);
                    }
                    else
                    {
                        sFilter = new StringFilter();
                        sFilter.SetActive(true);
                        sFilter.AutoDataBind = true;
                        sFilter.DataIndex = c.ColumnName;
                        f.Filters.Add(sFilter);
                    }
                 

                }

              
                grid.Reconfigure();
                // DataSet ds = rpt.GetData(false);

                store.DataSource = this.GetData(testData);
                store.DataBind();
                //this.GridPanel1.Title = rpt.ReportName;
                grid.DataBind();
                if (Ext.IsAjaxRequest)
                    grid.RefreshView();
            }
            catch (Exception er)
            {
                Utilities.NotificationError(er.ToString());
            }
        }

 

 

<ext:Store id="Store1" runat="server" autoload="false" AutoDataBind="false">
        <AjaxEventConfig IsUpload="true" />
        <Reader>
         <ext:JsonReader>
         </ext:JsonReader>
        </Reader>
    </ext:Store>


<ext:GridPanel id="GridPanel1" striperows="true" AutoDataBind="true" Title="No Report" header="false" trackmouseover="true" runat="server" storeid="Store1" autowidth="true" height="650">
        <SaveMask   ShowMask="true" />
        <LoadMask ShowMask="true" msg="Fetching" />
        <ColumnModel ID="ColumnModel1" runat="server">
            <Columns>
            </Columns>
        </ColumnModel>
        <View>
            <ext:GroupingView ID="GroupingView1" HideGroupedColumn="true" EmptyGroupText="No Groups" EnableGroupingMenu="true" runat="server" ForceFit="true" StartCollapsed="true" GroupTextTpl='<span id="ColorCode-{[values.rs[0].data.ColorCode]}"></span>{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})' EnableRowBody="true">
            </ext:GroupingView>
        </View>
        <Plugins>
           
        </Plugins>
        <BottomBar>
            <ext:PagingToolbar ID="PagingToolBar1" runat="server" StoreID="Store1" PageSize="50" DisplayInfo="true" DisplayMsg="Displaying Results {0} - {1} of {2}">
                <Items>
                    <ext:ToolbarButton ID="btnToggleGroups" runat="server" Text="Expand/Collapse Groups" Icon="TableSort" Style="margin-left: 6px;" AutoPostBack="false">
                        <Listeners>
                            <Click Handler="#{GridPanel1}.getView().toggleAllGroups();" />
                        </Listeners>
                    </ext:ToolbarButton>
                </Items>
            </ext:PagingToolbar>
        </BottomBar>
        <Listeners>    
                <BeforeUpdate Handler="#{maskDiv}.removeClass('x-hide-display');" />
                <Update Handler="#{maskDiv}.addClass('x-hide-display');" />
        </Listeners>
    </ext:GridPanel>

posted @ 2009-11-01 01:02  Andy  阅读(868)  评论(0编辑  收藏  举报