動態GridPanel

 在很多時候我們需要動態添加網格,此時我們就需要對GridPanel進行後臺繪製.設計如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CreationGridPanel.aspx.cs" Inherits="ExtNet.CreationGridPanel" %>

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
     <script type="text/javascript">
        var template = '<span style="color:{0};">{1}</span>';

        var change = function (value) {
            return String.format(template, (value > 0) ? "green" : "red", value);
        };

        var pctChange = function (value) {
            return String.format(template, (value > 0) ? "green" : "red", value + "%");
        };
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <ext:ResourceManager ID="ResourceManager1" runat="server">
    </ext:ResourceManager>
   <ext:Window 
        ID="Window1" 
        runat="server"
        Title="動態GridPanel"
        Layout="FitLayout"     
        Height="350"
        Width="600">
       <%-- FitLayout:對於包含一個單獨的項目,自動展開到能充滿 佈局所屬的容器
         FormLayout:此佈局管理器被特別設計用來 渲染和管理forms 的子組件。 它負責渲染Fields 的labels
         ColumnLayout:這是一種可選的佈局風格,用來在用一個多列的格式中創建結構化的佈局 ,可以使用百分比或者一個固定值指定每一列的寬度,但是允許根據內容 改變高度。
       --%>
        <TopBar>
            <ext:Toolbar ID="Toolbar1" runat="server">
                <Items>
                    <ext:Button  ID="btnAddGridPanel"
                        runat="server" 
                        Text="添加GridPanel" 
                        Icon="Add">
                        <DirectEvents>
                            <Click OnEvent="btnAddGridPanel_Click">
                                <EventMask 
                                    ShowMask="true" 
                                    Target="CustomTarget" 
                                    CustomTarget="Window1" 
                                    />
                            </Click>
                        </DirectEvents>    
                    </ext:Button>
                </Items>
            </ext:Toolbar>
        </TopBar>
    </ext:Window>
    </form>
</body>
</html>

後臺代碼如下:

using System;
using Ext.Net;

namespace ExtNet
{
    public partial class CreationGridPanel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnAddGridPanel_Click(object sender, DirectEventArgs e)
        {
            this.BuildGridPanel().AddTo(this.Window1);
       
            // Reference Button by sender argument
            ((Button)sender).Disabled = true;

            // Reference Button by .Items Collection
            //this.Window1.TopBar.Toolbar.Items[0].Disabled = true;          

            // Reference Button directly by .ID
            // this.btnAddGridPanel.Disabled = true;//這個最簡單吧
          

        }

        private GridPanel BuildGridPanel()
        {
            //動態添加控件
            return new GridPanel
            {
                Border = false,
                StripeRows = true,
                TrackMouseOver = true,
                AutoExpandColumn = "Company",
                Store =  
                        {
                            this.BuildStore()
                        },
                SelectionModel = 
                        { 
                            new RowSelectionModel { SingleSelect = true }
                        },
                      
                ColumnModel =
                {  
                    Columns =
                    {
                        new Column 
                        { 
                            ColumnID = "Company", 
                            Header = "Company", 
                            DataIndex = "company"  
                        },
                        new Column
                        {
                            Header = "Price",
                            DataIndex = "price",
                            Renderer = { Format = RendererFormat.UsMoney }
                        },
                        new Column
                        {
                            Header = "Change",
                            DataIndex = "change",
                            Renderer = { Fn = "change" }
                        },
                        new Column
                        {
                            Header = "Change",
                            DataIndex = "pctChange",
                            Renderer = { Fn = "pctChange" }
                        },
                        new DateColumn
                        {
                            Header = "Last Updated",
                            DataIndex = "lastChange"
                        }
                    }
                }
            };
        }
        //添加store
        private Store BuildStore()
        {
            Store store = new Store
            {
                ID = "Store1", // <-- ID is Required
                Reader = 
                { 
                    new ArrayReader 
                    {
                        Fields = 
                        {
                            new RecordField("company"),
                            new RecordField("price", RecordFieldType.Float),
                            new RecordField("change", RecordFieldType.Float),
                            new RecordField("pctChange", RecordFieldType.Float),
                            new RecordField("lastChange", RecordFieldType.Date, "M/d hh:mmtt")
                        }
                    }
                }
            };
            store.DataSource = this.Data;
            store.DataBind();
            return store;
        }

        private object[] Data
        {
            get
            {
                return new object[]
                {
                    new object[] { "3m Co", 71.72, 0.02, 0.03, "9/1 12:00am" },
                    new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, "9/1 12:00am" },
                    new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, "9/1 12:00am" },
                    new object[] { "American Express Company", 52.55, 0.01, 0.02, "9/1 12:00am" },
                    new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, "9/1 12:00am" },
                    new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, "9/1 12:00am" },
                    new object[] { "Boeing Co.", 75.43, 0.53, 0.71, "9/1 12:00am" },
                    new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, "9/1 12:00am" },
                    new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, "9/1 12:00am" },
                    new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, "9/1 12:00am" },
                    new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, "9/1 12:00am" },
                    new object[] { "General Electric Company", 34.14, -0.08, -0.23, "9/1 12:00am" },               
             };
           }
        }
    }
}
發佈了81 篇原創文章 · 獲贊 0 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章