DevExpress Add ASPxGridView template columns at runtime

来源:互联网 发布:郑州java培训哪家好 编辑:程序博客网 时间:2024/06/06 23:18
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %><%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %><%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Import Namespace="Microsoft.SharePoint" %><%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridPlan.aspx.cs" Inherits="PlanTest.Layouts.PlanTest.GridPlan"    DynamicMasterPageFile="~masterurl/default.master" %><%@ Register Assembly="DevExpress.Web.v11.1, Version=11.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"    Namespace="DevExpress.Web.ASPxHiddenField" TagPrefix="dx" %><%@ Register Assembly="DevExpress.Web.v11.1, Version=11.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"    Namespace="DevExpress.Web.ASPxCallback" TagPrefix="dx" %><%@ Register Assembly="DevExpress.Web.ASPxEditors.v11.1, Version=11.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"    Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %><%@ Register Assembly="DevExpress.Web.ASPxGridView.v11.1, Version=11.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"    Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %><asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">    <script type="text/javascript" language="javascript">        function GetSaveData() {            var rowCount = gdv.GetVisibleRowsOnPage();            var valueStr = '';            var colNameStr = hdl.Get("colNames");            for (var i = 0; i < rowCount; i++) {                var colNames = new Array();                colNames = colNameStr.split(',');                var id = gdv.GetRowKey(i);                for (var j = 0; j < colNames.length; j++) {                    var txtClientName = 'txt' + id + colNames[j];                    var txtEditor = ASPxClientControl.GetControlCollection().GetByName(txtClientName);                    valueStr = valueStr + txtEditor.GetText() + '&' + txtEditor.cpID + '|';                }            }            return valueStr;        }    </script></asp:Content><asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">    <dx:ASPxCallback ID="clb" runat="server" ClientInstanceName="clb" OnCallback="clb_OnCallback">        <ClientSideEvents CallbackComplete="function(s, e){                            if(e.result=='0')                            {                                //error                                alert('失败,联系管理员');                            }                            else                            {                                //yes                                alert('成功');                                gdv.Refresh();                            }        }" />    </dx:ASPxCallback>    <dx:ASPxHiddenField ID="hdl" runat="server" ClientInstanceName="hdl">    </dx:ASPxHiddenField>    <dx:ASPxGridView ID="gdv" ClientInstanceName="gdv" runat="server" OnLoad="gdv_OnLoad"        KeyFieldName="ID">        <Columns>            <dx:GridViewDataColumn FieldName="Name" Caption="Name">            </dx:GridViewDataColumn>            <dx:GridViewDataColumn FieldName="Count" Caption="Count">            </dx:GridViewDataColumn>        </Columns>    </dx:ASPxGridView>    <dx:ASPxButton ID="btnTest" runat="server" Text="保存">        <ClientSideEvents Click="function(s, e){                        clb.PerformCallback(GetSaveData());                        e.processOnServer = false;        }" />    </dx:ASPxButton></asp:Content><asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">    应用程序页</asp:Content><asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"    runat="server">    我的应用程序页</asp:Content>

using System;using Microsoft.SharePoint;using Microsoft.SharePoint.WebControls;using System.Web.UI;using DevExpress.Web.ASPxEditors;using DevExpress.Web.ASPxGridView;using System.Data;using System.Collections.Generic;using System.Linq;using DevExpress.Web.ASPxCallback;namespace PlanTest.Layouts.PlanTest{    public partial class GridPlan : LayoutsPageBase    {        TestEntities ent = new TestEntities();        protected void Page_Load(object sender, EventArgs e)        {        }        protected void gdv_OnLoad(object sender, EventArgs e)        {            int weekCount = 5;            string startDate = "2013/7/26";            string[] weeks = GetDatequantumList(weekCount, startDate);            gdv.DataSource = GetDataTable(weeks);            if (!IsPostBack && !IsCallback)            {                PopulateColumns(weeks);                gdv.DataBind();            }            else            {                CreateTemplate(weeks);            }        }        private object GetDataTable(string[] weeks)        {            string colNames = string.Empty;// "ID,";            DataTable table = ent.InfoList.ToDataTable();            for (int i = 0; i < weeks.Length; i++)            {                table.Columns.Add(weeks[i], typeof(string));                colNames += weeks[i] + ",";            }            colNames = colNames.TrimEnd(',');            hdl.Set("colNames", colNames);            foreach (DataRow row in table.Rows)            {                int id = Convert.ToInt32(row["ID"]);                List<Plan> plans = ent.Plan.Where(p => p.InfoList.ID == id).ToList();                for (int j = 0; j < weeks.Length; j++)                {                    //字段的值保存id和value的对应关系                    row[weeks[j]] = plans[j].Count + "|" + plans[j].ID;                }            }            return table;        }        public void PopulateColumns(string[] weeks)        {            GridViewBandColumn bandColumn = new GridViewBandColumn();            bandColumn.Caption = "测试";            for (int i = 0; i < weeks.Length; i++)            {                GridViewDataTextColumn colItemTemplate = new GridViewDataTextColumn();                colItemTemplate.DataItemTemplate = new MyTextTemplate(); // Create a template                colItemTemplate.FieldName = weeks[i];                colItemTemplate.Caption = weeks[i];                bandColumn.Columns.Add(colItemTemplate);            }            gdv.Columns.Add(bandColumn);        }        private void CreateTemplate(string[] weeks)        {            for (int i = 0; i < weeks.Length; i++)            {                ((GridViewDataColumn)gdv.Columns[weeks[i]]).DataItemTemplate = new MyTextTemplate();            }        }        protected void clb_OnCallback(object source, CallbackEventArgs e)        {            try            {                string[] newValues = e.Parameter.TrimEnd('|').Split('|');                foreach (string newValue in newValues)                {                    int workload = Convert.ToInt32(newValue.Substring(0, newValue.IndexOf('&')));                    int planID = Convert.ToInt32(newValue.Substring(newValue.IndexOf('&') + 1));                    Plan plan = ent.Plan.Where(p => p.ID == planID).FirstOrDefault();                    if (plan != null)                    {                        plan.Count = workload;                    }                }                ent.SaveChanges();                e.Result = "1";            }            catch            {                e.Result = "0";            }        }    }    class MyTextTemplate : ITemplate    {        public void InstantiateIn(Control container)        {            using (GridViewDataItemTemplateContainer gridContainer = (GridViewDataItemTemplateContainer)container)            {                string fieldValue = gridContainer.Grid.GetRowValuesByKeyValue(gridContainer.KeyValue, gridContainer.Column.FieldName).ToString();                ASPxTextBox txt = new ASPxTextBox();                txt.Width = 46;                txt.Text = fieldValue.Substring(0, fieldValue.IndexOf("|"));                txt.JSProperties["cpID"] = fieldValue.Substring(fieldValue.IndexOf("|") + 1);                txt.ClientInstanceName = "txt" + gridContainer.KeyValue.ToString() + gridContainer.Column.FieldName;                txt.DisplayFormatString = "F2";                container.Controls.Add(txt);            }        }    }}


Above is almost full code what I did for test. It mainly used in the situation of making plans, which user can complete the plan of multiple work at one time.

All rights reserved