zoukankan      html  css  js  c++  java
  • DevExpress Add ASPxGridView template columns at runtime

    <%@ 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

  • 相关阅读:
    打开服务器的文档
    笔记
    centos6.5 编译openssl-1.1.1k
    搭建自己的低代码平台
    防火墙ACL配置自动化
    防火墙ACL配置自动化
    【树莓派】读取新大陆(newland)USB条码扫描器数据
    解决eclipse或sts闪退的办法(转)
    浅谈数据库迁移类项目功能测试的基本思路
    ATM取款机优化需求的用例设计
  • 原文地址:https://www.cnblogs.com/justinliu/p/5961705.html
Copyright © 2011-2022 走看看